summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mueller <MarkKMueller@gmail.com>2013-11-22 01:15:12 -0800
committerMark Mueller <MarkKMueller@gmail.com>2014-01-13 09:44:30 -0800
commitd5b25b9992992773acaabc9d8c90183f922347e9 (patch)
tree52e5adbde69b1be0a7c5135139b55c665384c5f6
parent19252c59df93871f43707be18f1a25433127f051 (diff)
Resolving piglit regressions
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp.h3
-rw-r--r--src/mesa/drivers/dri/i965/brw_blorp_blit.cpp121
2 files changed, 68 insertions, 56 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h
index 1bc3378767..2be91fefe5 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.h
+++ b/src/mesa/drivers/dri/i965/brw_blorp.h
@@ -364,6 +364,9 @@ public:
GLuint find_brw_format(struct brw_context *brw, gl_format src_format);
+ static bool compare_source_to_target(struct brw_context *brw,
+ GLenum baseSourceFormat,
+ GLenum baseDestinationFormat);
static bool test_formats(struct brw_context *brw,
gl_format src_format,
gl_format dst_format,
diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
index 1cee5c3553..0950473a43 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
+++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
@@ -2250,6 +2250,67 @@ brw_blorp_blit_params::find_brw_format(struct brw_context *brw, gl_format src_fo
}
bool
+brw_blorp_blit_params::compare_source_to_target(struct brw_context *brw,
+ GLenum baseSourceFormat,
+ GLenum baseDestinationFormat) {
+ bool testPassed = false;
+ switch (baseSourceFormat) {
+ case GL_RED:
+ testPassed = (GL_R == baseDestinationFormat);
+ break;
+ case GL_RG:
+ testPassed = (GL_R == baseDestinationFormat ||
+ GL_RG == baseDestinationFormat);
+ break;
+ case GL_RGB:
+ testPassed = (GL_R == baseDestinationFormat ||
+ GL_RG == baseDestinationFormat ||
+ GL_RGB == baseDestinationFormat);
+ break;
+ case GL_RGBA:
+ switch (baseDestinationFormat) {
+ case GL_RED:
+ case GL_RG:
+ case GL_RGBA:
+ case GL_RGB:
+ testPassed = true;
+ break;
+ default:
+ testPassed = false;
+ }
+ break;
+ case GL_LUMINANCE:
+ case GL_LUMINANCE_ALPHA:
+ switch (baseDestinationFormat) {
+ case GL_ALPHA:
+ case GL_INTENSITY:
+ case GL_LUMINANCE:
+ case GL_LUMINANCE_ALPHA:
+ testPassed = true;
+ default:
+ testPassed = false;
+ }
+ break;
+ case GL_DEPTH_COMPONENT:
+ testPassed = (GL_DEPTH_COMPONENT == baseDestinationFormat);
+ break;
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_STENCIL:
+ testPassed = (GL_DEPTH_STENCIL == baseDestinationFormat || GL_STENCIL_INDEX == baseDestinationFormat);
+ break;
+ default:
+ testPassed = false;
+ }
+
+ if (!testPassed) {
+ _mesa_debug(&brw->ctx, "%s: Target format %s doesn't match cached base: %s\n",
+ __FUNCTION__, _mesa_lookup_enum_by_nr(baseDestinationFormat), _mesa_lookup_enum_by_nr(baseSourceFormat));
+ return false;
+ }
+ return true;
+}
+
+bool
brw_blorp_blit_params::test_formats(struct brw_context *brw,
gl_format src_format,
gl_format dst_format,
@@ -2306,63 +2367,11 @@ brw_blorp_blit_params::test_formats(struct brw_context *brw,
return false;
}
- if (0 != internal_format) {
- GLenum baseSourceFormat = _mesa_get_format_base_format(src_format);
- GLenum internalFormat = _mesa_base_tex_format(&brw->ctx, internal_format);
- switch (baseSourceFormat) {
- case GL_RED:
- case GL_RG:
- case GL_RGB:
- case GL_RGBA:
- switch (internalFormat) {
- case GL_RED:
- case GL_RG:
- case GL_RGB:
- case GL_RGBA:
- break;
- default:
- /*
- * Blorp does not properly handle Luminance internalFormat (meanwhile Mesa chooses
- * a RGB target, thus blorp never even knows that luminance was requested).
- */
- _mesa_debug(&brw->ctx, "%s: Target internal format %s doesn't match cached base: %s\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr(internalFormat), _mesa_lookup_enum_by_nr(baseSourceFormat));
- return false;
- }
- break;
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- switch (internalFormat) {
- case GL_ALPHA:
- case GL_INTENSITY:
- case GL_LUMINANCE:
- case GL_LUMINANCE_ALPHA:
- break;
- default:
- _mesa_debug(&brw->ctx, "%s: Target base format %s doesn't match cached base: %s\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr(internalFormat), _mesa_lookup_enum_by_nr(baseSourceFormat));
- return false;
- }
- case GL_DEPTH_COMPONENT:
- if (GL_DEPTH_COMPONENT == internalFormat) {
- break;
- }
- _mesa_debug(&brw->ctx, "%s: Target base format %s doesn't match cached base: %s\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr(internalFormat), _mesa_lookup_enum_by_nr(baseSourceFormat));
- return false;
- case GL_STENCIL_INDEX:
- case GL_DEPTH_STENCIL:
- if (GL_DEPTH_STENCIL == internalFormat || GL_STENCIL_INDEX == internalFormat) {
- break;
- }
- default:
- _mesa_debug(&brw->ctx, "%s: Target base format %s doesn't match cached base: %s\n",
- __FUNCTION__, _mesa_lookup_enum_by_nr(internalFormat), _mesa_lookup_enum_by_nr(baseSourceFormat));
- return false;
- }
- }
+ GLenum baseSourceFormat = _mesa_get_format_base_format(src_format);
+ GLenum baseDestinationFormat = _mesa_get_format_base_format(dst_format);
- return true;
+ return compare_source_to_target(brw, baseSourceFormat, baseDestinationFormat) &&
+ compare_source_to_target(brw, baseSourceFormat, internal_format);
}
brw_blorp_blit_params::brw_blorp_blit_params(struct brw_context *brw,