From 6988f65e43297ae63bbce30bf882f870b370096c Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 7 Jul 2010 20:26:33 -0600 Subject: mesa: initial support for new GL 3.0 texture formats --- src/mesa/main/extensions.c | 6 ++-- src/mesa/main/mtypes.h | 6 ++-- src/mesa/main/teximage.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++ src/mesa/main/version.c | 3 +- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 3d2de973bc..19a1eebe6e 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -46,8 +46,9 @@ static const struct { } default_extensions[] = { { OFF, "GL_ARB_blend_func_extended", F(ARB_blend_func_extended) }, { OFF, "GL_ARB_copy_buffer", F(ARB_copy_buffer) }, - { OFF, "GL_ARB_depth_texture", F(ARB_depth_texture) }, + { OFF, "GL_ARB_depth_buffer_float", F(ARB_depth_buffer_float) }, { OFF, "GL_ARB_depth_clamp", F(ARB_depth_clamp) }, + { OFF, "GL_ARB_depth_texture", F(ARB_depth_texture) }, { ON, "GL_ARB_draw_buffers", F(ARB_draw_buffers) }, { OFF, "GL_ARB_draw_elements_base_vertex", F(ARB_draw_elements_base_vertex) }, { OFF, "GL_ARB_draw_instanced", F(ARB_draw_instanced) }, @@ -92,6 +93,7 @@ static const struct { { OFF, "GL_ARB_texture_multisample", F(ARB_texture_multisample) }, { OFF, "GL_ARB_texture_non_power_of_two", F(ARB_texture_non_power_of_two)}, { OFF, "GL_ARB_texture_rectangle", F(NV_texture_rectangle) }, + { OFF, "GL_ARB_texture_rg", F(ARB_texture_rg) }, { OFF, "GL_ARB_texture_rgb10_a2ui", F(ARB_texture_rgb10_a2ui) }, { OFF, "GL_ARB_texture_swizzle", F(EXT_texture_swizzle) }, { ON, "GL_ARB_transpose_matrix", F(ARB_transpose_matrix) }, @@ -141,7 +143,6 @@ static const struct { { OFF, "GL_EXT_secondary_color", F(EXT_secondary_color) }, { ON, "GL_EXT_separate_specular_color", F(EXT_separate_specular_color) }, { OFF, "GL_EXT_shadow_funcs", F(EXT_shadow_funcs) }, - { OFF, "GL_EXT_shared_exponent", F(EXT_shared_exponent) }, { OFF, "GL_EXT_shared_texture_palette", F(EXT_shared_texture_palette) }, { OFF, "GL_EXT_stencil_two_side", F(EXT_stencil_two_side) }, { OFF, "GL_EXT_stencil_wrap", F(EXT_stencil_wrap) }, @@ -162,6 +163,7 @@ static const struct { { OFF, "GL_EXT_texture_mirror_clamp", F(EXT_texture_mirror_clamp) }, { ON, "GL_EXT_texture_object", F(EXT_texture_object) }, { OFF, "GL_EXT_texture_rectangle", F(NV_texture_rectangle) }, + { OFF, "GL_EXT_texture_shared_exponent", F(EXT_texture_shared_exponent) }, { OFF, "GL_EXT_texture_sRGB", F(EXT_texture_sRGB) }, { OFF, "GL_EXT_texture_swizzle", F(EXT_texture_swizzle) }, { OFF, "GL_EXT_timer_query", F(EXT_timer_query) }, diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 0aeb130cb8..a3f89f2f9b 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2606,8 +2606,9 @@ struct gl_extensions GLboolean dummy; /* don't remove this! */ GLboolean ARB_blend_func_extended; GLboolean ARB_copy_buffer; - GLboolean ARB_depth_texture; + GLboolean ARB_depth_buffer_float; GLboolean ARB_depth_clamp; + GLboolean ARB_depth_texture; GLboolean ARB_draw_buffers; GLboolean ARB_draw_elements_base_vertex; GLboolean ARB_draw_instanced; @@ -2647,6 +2648,7 @@ struct gl_extensions GLboolean ARB_texture_mirrored_repeat; GLboolean ARB_texture_multisample; GLboolean ARB_texture_non_power_of_two; + GLboolean ARB_texture_rg; GLboolean ARB_texture_rgb10_a2ui; GLboolean ARB_timer_query; GLboolean ARB_transform_feedback2; @@ -2694,7 +2696,6 @@ struct gl_extensions GLboolean EXT_shadow_funcs; GLboolean EXT_secondary_color; GLboolean EXT_separate_specular_color; - GLboolean EXT_shared_exponent; GLboolean EXT_shared_texture_palette; GLboolean EXT_stencil_wrap; GLboolean EXT_stencil_two_side; @@ -2712,6 +2713,7 @@ struct gl_extensions GLboolean EXT_texture_integer; GLboolean EXT_texture_lod_bias; GLboolean EXT_texture_mirror_clamp; + GLboolean EXT_texture_shared_exponent; GLboolean EXT_texture_sRGB; GLboolean EXT_texture_swizzle; GLboolean EXT_transform_feedback; diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index f307322010..50890a3c1e 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -402,6 +402,81 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat ) } } + if (ctx->Extensions.ARB_texture_rg) { + switch (internalFormat) { + case GL_R8: + case GL_R16: + case GL_R16F: + case GL_R32F: + case GL_R8I: + case GL_R8UI: + case GL_R16I: + case GL_R16UI: + case GL_R32I: + case GL_R32UI: + return GL_R; + case GL_RG: + case GL_RG_INTEGER: + case GL_RG8: + case GL_RG16: + case GL_RG16F: + case GL_RG32F: + case GL_RG8I: + case GL_RG8UI: + case GL_RG16I: + case GL_RG16UI: + case GL_RG32I: + case GL_RG32UI: + return GL_RG; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_texture_shared_exponent) { + switch (internalFormat) { + case GL_RGB9_E5_EXT: + return GL_RGB; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_packed_float) { + switch (internalFormat) { + case GL_R11F_G11F_B10F_EXT: + return GL_RGB; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.ARB_depth_buffer_float) { + switch (internalFormat) { + case GL_DEPTH_COMPONENT32F: + return GL_DEPTH_COMPONENT; + case GL_DEPTH32F_STENCIL8: + return GL_DEPTH_STENCIL; + default: + ; /* fallthrough */ + } + } + + if (ctx->Extensions.EXT_texture_compression_rgtc) { + switch (internalFormat) { + case GL_COMPRESSED_RED: + case GL_COMPRESSED_RED_RGTC1_EXT: + case GL_COMPRESSED_SIGNED_RED_RGTC1_EXT: + return GL_RED; + case GL_COMPRESSED_RG: + case GL_COMPRESSED_RED_GREEN_RGTC2_EXT: + case GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: + return GL_RG; + default: + ; /* fallthrough */ + } + } + return -1; /* error */ } diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c index 525d179621..d833a160e9 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -91,6 +91,7 @@ compute_version(GLcontext *ctx) ctx->Extensions.ARB_half_float_pixel && ctx->Extensions.ARB_map_buffer_range && ctx->Extensions.ARB_texture_float && + ctx->Extensions.ARB_texture_rg && ctx->Extensions.APPLE_vertex_array_object && ctx->Extensions.EXT_draw_buffers2 && ctx->Extensions.EXT_framebuffer_blit && @@ -99,10 +100,10 @@ compute_version(GLcontext *ctx) ctx->Extensions.EXT_framebuffer_sRGB && ctx->Extensions.EXT_packed_depth_stencil && ctx->Extensions.EXT_packed_float && - ctx->Extensions.EXT_shared_exponent && ctx->Extensions.EXT_texture_array && ctx->Extensions.EXT_texture_compression_rgtc && ctx->Extensions.EXT_texture_integer && + ctx->Extensions.EXT_texture_shared_exponent && ctx->Extensions.EXT_transform_feedback && ctx->Extensions.NV_conditional_render); const GLboolean ver_3_1 = (ver_3_0 && -- cgit v1.2.3