mesa: initial support for new GL 3.0 texture formats
authorBrian Paul <brianp@vmware.com>
Thu, 8 Jul 2010 02:26:33 +0000 (20:26 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 8 Jul 2010 02:26:33 +0000 (20:26 -0600)
src/mesa/main/extensions.c
src/mesa/main/mtypes.h
src/mesa/main/teximage.c
src/mesa/main/version.c

index 3d2de973bc54feec6ba4e44d9ae7924154aad3af..19a1eebe6e9e6903be8cff3273b1083277cd1f8f 100644 (file)
@@ -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) },
index 0aeb130cb85e3166b88405ad2b336fb6ad03aeca..a3f89f2f9b9b41ab72a6c043f1f8d11a3a77b5c6 100644 (file)
@@ -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;
index f3073220104c8f6057192d730bae79cf66fd1ba2..50890a3c1e3286c7975c8ae7b40b1ef24146dd3a 100644 (file)
@@ -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 */
 }
 
index 525d179621b4829cee168b7a734a2b28539b12a7..d833a160e9e55da858deec64703e48be9bbcbb76 100644 (file)
@@ -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 &&