mesa: complete the GL_TEXTURE_SWIZZLE* setup
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Fri, 21 Oct 2011 03:27:25 +0000 (11:27 +0800)
committerYuanhan Liu <yuanhan.liu@linux.intel.com>
Thu, 3 Nov 2011 02:19:49 +0000 (10:19 +0800)
The ARB_texture_swizzle spec says:
    The error INVALID_OPERATION is generated if TexParameteri,
    TexParameterf, TexParameteriv, or TexParameterfv, parameter <pname>
    is TEXTURE_SWIZZLE_R, TEXTURE_SWIZZLE_G,  TEXTURE_SWIZZLE_B,
    or TEXTURE_SWIZZLE_A, and <param> is not RED, GREEN, BLUE, ALPHA,
    ZERO, or ONE.

    The error INVALID_OPERATION is generated if TexParameteriv, or
    TexParameterfv, parameter <pname> TEXTURE_SWIZZLE_RGBA, and the four
    consecutive values pointed to by <param> are not all RED, GREEN, BLUE,
    ALPHA, ZERO, or ONE.

So, the GL_TEXTURE_SWIZZLE* pname is legal for glTexParameterf(v)

NOTE: this is a candidate for the 7.11 branch

Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/texparam.c

index 6da730d6711d3ed646b92e18b04744abc25473ea..73e5cbec0e4f4ea0d78a846965f27af8e86764b6 100644 (file)
@@ -596,6 +596,17 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param)
          need_update = set_tex_parameteri(ctx, texObj, pname, p);
       }
       break;
+   case GL_TEXTURE_SWIZZLE_R_EXT:
+   case GL_TEXTURE_SWIZZLE_G_EXT:
+   case GL_TEXTURE_SWIZZLE_B_EXT:
+   case GL_TEXTURE_SWIZZLE_A_EXT:
+      {
+         GLint p[4];
+         p[0] = (GLint) param;
+         p[1] = p[2] = p[3] = 0;
+         need_update = set_tex_parameteri(ctx, texObj, pname, p);
+      }
+      break;
    default:
       {
          /* this will generate an error if pname is illegal */
@@ -661,6 +672,22 @@ _mesa_TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
       break;
 #endif
 
+   case GL_TEXTURE_SWIZZLE_R_EXT:
+   case GL_TEXTURE_SWIZZLE_G_EXT:
+   case GL_TEXTURE_SWIZZLE_B_EXT:
+   case GL_TEXTURE_SWIZZLE_A_EXT:
+   case GL_TEXTURE_SWIZZLE_RGBA_EXT:
+      {
+         GLint p[4] = {0, 0, 0, 0};
+         p[0] = (GLint) params[0];
+         if (pname == GL_TEXTURE_SWIZZLE_RGBA_EXT) {
+            p[1] = (GLint) params[1];
+            p[2] = (GLint) params[2];
+            p[3] = (GLint) params[3];
+         }
+         need_update = set_tex_parameteri(ctx, texObj, pname, p);
+      }
+      break;
    default:
       /* this will generate an error if pname is illegal */
       need_update = set_tex_parameterf(ctx, texObj, pname, params);