OpenGL doesn't expect internalformat={1,2,3,4} to work
elsewhere than glTexImage{1,2,3}D, as clearly stated in the
spec of glCopyTexImage2D (taken from the OpenGL 1.1 spec,
similar wording is present up to OpenGL 3.1 core, where
OpenGL 1.0 compatibility was scrapped entirely):

"Parameters level, internalformat, and border are specified using
the same values, with the same meanings, as the equivalent
arguments of TexImage2D, except that internalformat may not be
specified as 1, 2, 3, or 4."

Fixes piglit tests:
 * spec@!opengl 1.1@copyteximage 1d
 * spec@!opengl 1.1@copyteximage 2d
 * spec@arb_texture_cube_map@copyteximage cube
 * spec@arb_texture_rectangle@copyteximage rect

No piglit regressions.
---

These piglit tests were just submitted (by me) on the piglit
mailing list, not yet a part of piglit.

 src/mesa/drivers/dri/nouveau/nouveau_texture.c |  4 ---
 src/mesa/drivers/dri/radeon/radeon_texture.c   |  4 ---
 src/mesa/main/glformats.c                      | 12 ---------
 src/mesa/main/texformat.c                      |  4 ---
 src/mesa/main/teximage.c                       | 35 +++++++++++++++++++++-----
 src/mesa/state_tracker/st_format.c             |  3 +--
 6 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c 
b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index dc5699c..ea0e1aa 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -166,7 +166,6 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLenum 
target,
                          GLenum srcFormat, GLenum srcType)
 {
        switch (internalFormat) {
-       case 4:
        case GL_RGBA:
        case GL_RGBA2:
        case GL_RGBA4:
@@ -186,13 +185,11 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLenum 
target,
        case GL_RGB16:
        case GL_COMPRESSED_RGB:
                return MESA_FORMAT_B8G8R8X8_UNORM;
-       case 3:
        case GL_R3_G3_B2:
        case GL_RGB4:
        case GL_RGB5:
                return MESA_FORMAT_B5G6R5_UNORM;
 
-       case 2:
        case GL_LUMINANCE_ALPHA:
        case GL_LUMINANCE4_ALPHA4:
        case GL_LUMINANCE6_ALPHA2:
@@ -203,7 +200,6 @@ nouveau_choose_tex_format(struct gl_context *ctx, GLenum 
target,
        case GL_COMPRESSED_LUMINANCE_ALPHA:
                return MESA_FORMAT_B8G8R8A8_UNORM;
 
-       case 1:
        case GL_LUMINANCE:
        case GL_LUMINANCE4:
        case GL_LUMINANCE12:
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c 
b/src/mesa/drivers/dri/radeon/radeon_texture.c
index 4794dda..6a6aa04 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -286,7 +286,6 @@ mesa_format radeonChooseTextureFormat(struct gl_context * 
ctx,
                        __func__, do32bpt, force16bpt);
 
        switch (internalFormat) {
-       case 4:
        case GL_RGBA:
        case GL_COMPRESSED_RGBA:
                switch (type) {
@@ -305,7 +304,6 @@ mesa_format radeonChooseTextureFormat(struct gl_context * 
ctx,
                            _radeon_texformat_argb4444;
                }
 
-       case 3:
        case GL_RGB:
        case GL_COMPRESSED_RGB:
                switch (type) {
@@ -363,7 +361,6 @@ mesa_format radeonChooseTextureFormat(struct gl_context * 
ctx,
 #else
                return MESA_FORMAT_A_UNORM8;
 #endif
-       case 1:
        case GL_LUMINANCE:
        case GL_LUMINANCE4:
        case GL_LUMINANCE8:
@@ -372,7 +369,6 @@ mesa_format radeonChooseTextureFormat(struct gl_context * 
ctx,
        case GL_COMPRESSED_LUMINANCE:
                return MESA_FORMAT_L_UNORM8;
 
-       case 2:
        case GL_LUMINANCE_ALPHA:
        case GL_LUMINANCE4_ALPHA4:
        case GL_LUMINANCE6_ALPHA2:
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 3eb66da..1f8bb4b 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -636,14 +636,12 @@ _mesa_is_enum_format_unorm(GLenum format)
       case GL_ALPHA8:
       case GL_ALPHA12:
       case GL_ALPHA16:
-      case 1:
       case GL_LUMINANCE:
       case GL_SLUMINANCE:
       case GL_LUMINANCE4:
       case GL_LUMINANCE8:
       case GL_LUMINANCE12:
       case GL_LUMINANCE16:
-      case 2:
       case GL_LUMINANCE_ALPHA:
       case GL_SLUMINANCE_ALPHA:
       case GL_LUMINANCE4_ALPHA4:
@@ -662,7 +660,6 @@ _mesa_is_enum_format_unorm(GLenum format)
       case GL_RG:
       case GL_RG8:
       case GL_RG16:
-      case 3:
       case GL_RGB:
       case GL_BGR:
       case GL_SRGB:
@@ -674,7 +671,6 @@ _mesa_is_enum_format_unorm(GLenum format)
       case GL_RGB10:
       case GL_RGB12:
       case GL_RGB16:
-      case 4:
       case GL_ABGR_EXT:
       case GL_RGBA:
       case GL_BGRA:
@@ -881,13 +877,11 @@ _mesa_is_color_format(GLenum format)
       case GL_ALPHA8:
       case GL_ALPHA12:
       case GL_ALPHA16:
-      case 1:
       case GL_LUMINANCE:
       case GL_LUMINANCE4:
       case GL_LUMINANCE8:
       case GL_LUMINANCE12:
       case GL_LUMINANCE16:
-      case 2:
       case GL_LUMINANCE_ALPHA:
       case GL_LUMINANCE4_ALPHA4:
       case GL_LUMINANCE6_ALPHA2:
@@ -905,7 +899,6 @@ _mesa_is_color_format(GLenum format)
       case GL_RG:
       case GL_RG8:
       case GL_RG16:
-      case 3:
       case GL_RGB:
       case GL_BGR:
       case GL_R3_G3_B2:
@@ -916,7 +909,6 @@ _mesa_is_color_format(GLenum format)
       case GL_RGB10:
       case GL_RGB12:
       case GL_RGB16:
-      case 4:
       case GL_ABGR_EXT:
       case GL_RGBA:
       case GL_BGRA:
@@ -1519,16 +1511,12 @@ _mesa_get_nongeneric_internalformat(GLenum format)
 {
    switch (format) {
    /* GL 1.1 formats. */
-   case 4:
    case GL_RGBA:
       return GL_RGBA8;
-   case 3:
    case GL_RGB:
       return GL_RGB8;
-   case 2:
    case GL_LUMINANCE_ALPHA:
       return GL_LUMINANCE8_ALPHA8;
-   case 1:
    case GL_LUMINANCE:
       return GL_LUMINANCE8;
    case GL_ALPHA:
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index f4d17e1..fa8be94 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -67,7 +67,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
 
    switch (internalFormat) {
    /* shallow RGBA formats */
-   case 4:
    case GL_RGBA:
       if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
          RETURN_IF_SUPPORTED(MESA_FORMAT_B4G4R4A4_UNORM);
@@ -109,7 +108,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum 
target,
       break;
 
    /* shallow RGB formats */
-   case 3:
    case GL_RGB:
       if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
          RETURN_IF_SUPPORTED(MESA_FORMAT_B10G10R10A2_UNORM);
@@ -166,7 +164,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum 
target,
       break;
 
    /* Luminance formats */
-   case 1:
    case GL_LUMINANCE:
    case GL_LUMINANCE4:
    case GL_LUMINANCE8:
@@ -185,7 +182,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum 
target,
       RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
       break;
 
-   case 2:
    case GL_LUMINANCE_ALPHA:
    case GL_LUMINANCE6_ALPHA2:
    case GL_LUMINANCE8_ALPHA8:
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 7605d1b..127d4c9 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -139,14 +139,12 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint 
internalFormat )
    case GL_ALPHA12:
    case GL_ALPHA16:
       return (ctx->API != API_OPENGL_CORE) ? GL_ALPHA : -1;
-   case 1:
    case GL_LUMINANCE:
    case GL_LUMINANCE4:
    case GL_LUMINANCE8:
    case GL_LUMINANCE12:
    case GL_LUMINANCE16:
       return (ctx->API != API_OPENGL_CORE) ? GL_LUMINANCE : -1;
-   case 2:
    case GL_LUMINANCE_ALPHA:
    case GL_LUMINANCE4_ALPHA4:
    case GL_LUMINANCE6_ALPHA2:
@@ -161,8 +159,6 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint 
internalFormat )
    case GL_INTENSITY12:
    case GL_INTENSITY16:
       return (ctx->API != API_OPENGL_CORE) ? GL_INTENSITY : -1;
-   case 3:
-      return (ctx->API != API_OPENGL_CORE) ? GL_RGB : -1;
    case GL_RGB:
    case GL_R3_G3_B2:
    case GL_RGB4:
@@ -172,8 +168,6 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint 
internalFormat )
    case GL_RGB12:
    case GL_RGB16:
       return GL_RGB;
-   case 4:
-      return (ctx->API != API_OPENGL_CORE) ? GL_RGBA : -1;
    case GL_RGBA:
    case GL_RGBA2:
    case GL_RGBA4:
@@ -3231,6 +3225,35 @@ teximage(struct gl_context *ctx, GLboolean compressed, 
GLuint dims,
 
    internalFormat = override_internal_format(internalFormat, width, height);
 
+   if (ctx->API == API_OPENGL_COMPAT)
+   {
+      /* OpenGL 3.0 spec says:
+       *
+       * "internalformat may (for backwards compatibility with the 1.0
+       * version of the GL) also take on the integer values 1, 2, 3,
+       * and 4, which are equivalent to symbolic constants LUMINANCE,
+       * LUMINANCE ALPHA, RGB, and RGBA respectively.
+       */
+
+      switch (internalFormat) {
+      case 1:
+         internalFormat = GL_LUMINANCE;
+         break;
+
+      case 2:
+         internalFormat = GL_LUMINANCE_ALPHA;
+         break;
+
+      case 3:
+         internalFormat = GL_RGB;
+         break;
+
+      case 4:
+         internalFormat = GL_RGBA;
+         break;
+      }
+   }
+
    /* target error checking */
    if (!legal_teximage_target(ctx, dims, target)) {
       _mesa_error(ctx, GL_INVALID_ENUM, "%s%uD(target=%s)",
diff --git a/src/mesa/state_tracker/st_format.c 
b/src/mesa/state_tracker/st_format.c
index db7b5b7..6bab2ff 100644
--- a/src/mesa/state_tracker/st_format.c
+++ b/src/mesa/state_tracker/st_format.c
@@ -1963,8 +1963,7 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum 
target,
    bindings = PIPE_BIND_SAMPLER_VIEW;
    if (_mesa_is_depth_or_stencil_format(internalFormat))
       bindings |= PIPE_BIND_DEPTH_STENCIL;
-   else if (internalFormat == 3 || internalFormat == 4 ||
-            internalFormat == GL_RGB || internalFormat == GL_RGBA ||
+   else if (internalFormat == GL_RGB || internalFormat == GL_RGBA ||
             internalFormat == GL_RGB8 || internalFormat == GL_RGBA8 ||
             internalFormat == GL_BGRA)
         bindings |= PIPE_BIND_RENDER_TARGET;
-- 
2.1.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to