aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Roberts <[email protected]>2015-11-19 15:06:08 +0100
committerNeil Roberts <[email protected]>2015-12-10 11:03:49 +0000
commit3f10774cbab1e803f8aa3d6d24f8f6f98b8128c3 (patch)
tree4090b653bb3ae48638f0edad44fadf7025246583
parent9a31d9870b0c2113eefd1c2baf347ab8b288f6a6 (diff)
i965: Check base format to determine whether to use tiled memcpy
The tiled memcpy doesn't work for copying from RGBX to RGBA because it doesn't override the alpha component to 1.0. Commit 2cebaac479d4 added a check to disable it for RGBX formats by looking at the TexFormat. However a lot of the rest of the code base is written with the assumption that an RGBA texture can be used internally to implement a GL_RGB texture. If that is done then this check breaks. This patch makes it instead check the base format of the texture which I think more directly matches the intention. Reviewed-by: Jason Ekstrand <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_pixel_read.c7
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c7
2 files changed, 8 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_pixel_read.c b/src/mesa/drivers/dri/i965/intel_pixel_read.c
index 347f88077ea..10d14623fe1 100644
--- a/src/mesa/drivers/dri/i965/intel_pixel_read.c
+++ b/src/mesa/drivers/dri/i965/intel_pixel_read.c
@@ -134,10 +134,11 @@ intel_readpixels_tiled_memcpy(struct gl_context * ctx,
return false;
/* We can't handle copying from RGBX or BGRX because the tiled_memcpy
- * function doesn't set the last channel to 1.
+ * function doesn't set the last channel to 1. Note this checks BaseFormat
+ * rather than TexFormat in case the RGBX format is being simulated with an
+ * RGBA format.
*/
- if (rb->Format == MESA_FORMAT_B8G8R8X8_UNORM ||
- rb->Format == MESA_FORMAT_R8G8B8X8_UNORM)
+ if (rb->_BaseFormat == GL_RGB)
return false;
if (!intel_get_memcpy(rb->Format, format, type, &mem_copy, &cpp,
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index 393ab48d9f7..5d32a4ce650 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -398,10 +398,11 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx,
return false;
/* We can't handle copying from RGBX or BGRX because the tiled_memcpy
- * function doesn't set the last channel to 1.
+ * function doesn't set the last channel to 1. Note this checks BaseFormat
+ * rather than TexFormat in case the RGBX format is being simulated with an
+ * RGBA format.
*/
- if (texImage->TexFormat == MESA_FORMAT_B8G8R8X8_UNORM ||
- texImage->TexFormat == MESA_FORMAT_R8G8B8X8_UNORM)
+ if (texImage->_BaseFormat == GL_RGB)
return false;
if (!intel_get_memcpy(texImage->TexFormat, format, type, &mem_copy, &cpp,