[Mesa-dev] [PATCH 5/7] intel: Clean up check_pbo_format to ignore internalFormat.

Eric Anholt eric at anholt.net
Wed Sep 21 10:15:47 PDT 2011


All that matters here is the format of the texture, not the
internalformat (which might mean various different pixel formats).  In
one case, the pbo upload for MESA_FORMAT_YCBCR would have swapped the
channels for MESA_FORMAT_YCBCR_REV.
---
 src/mesa/drivers/dri/intel/intel_tex_image.c |   38 +++++++++-----------------
 1 files changed, 13 insertions(+), 25 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c
index 18fccba..9ae0aee 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_image.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
@@ -123,33 +123,22 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
 /* There are actually quite a few combinations this will work for,
  * more than what I've listed here.
  */
-static GLboolean
-check_pbo_format(GLint internalFormat,
-                 GLenum format, GLenum type,
+static bool
+check_pbo_format(GLenum format, GLenum type,
                  gl_format mesa_format)
 {
-   switch (internalFormat) {
-   case 4:
-   case GL_RGBA:
-   case GL_RGBA8:
-      return (format == GL_BGRA &&
-              (type == GL_UNSIGNED_BYTE ||
-               type == GL_UNSIGNED_INT_8_8_8_8_REV) &&
-              mesa_format == MESA_FORMAT_ARGB8888);
-   case 3:
-   case GL_RGB:
-      return (format == GL_RGB &&
-              type == GL_UNSIGNED_SHORT_5_6_5 &&
-              mesa_format == MESA_FORMAT_RGB565);
-   case 1:
-   case GL_LUMINANCE:
-      return (format == GL_LUMINANCE &&
-	      type == GL_UNSIGNED_BYTE &&
-	      mesa_format == MESA_FORMAT_L8);
-   case GL_YCBCR_MESA:
+   switch (mesa_format) {
+   case MESA_FORMAT_ARGB8888:
+      return (format == GL_BGRA && (type == GL_UNSIGNED_BYTE ||
+				    type == GL_UNSIGNED_INT_8_8_8_8_REV));
+   case MESA_FORMAT_RGB565:
+      return (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5);
+   case MESA_FORMAT_L8:
+      return (format == GL_LUMINANCE && type == GL_UNSIGNED_BYTE);
+   case MESA_FORMAT_YCBCR:
       return (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE);
    default:
-      return GL_FALSE;
+      return false;
    }
 }
 
@@ -186,8 +175,7 @@ try_pbo_upload(struct intel_context *intel,
       return false;
    }
 
-   if (!check_pbo_format(intelImage->base.Base.InternalFormat, format,
-			 type, intelImage->base.Base.TexFormat)) {
+   if (!check_pbo_format(format, type, intelImage->base.Base.TexFormat)) {
       DBG("%s: format mismatch (upload to %s with format 0x%x, type 0x%x)\n",
 	  __FUNCTION__, _mesa_get_format_name(intelImage->base.Base.TexFormat),
 	  format, type);
-- 
1.7.5.4



More information about the mesa-dev mailing list