diff options
author | Mark Mueller <MarkKMueller@gmail.com> | 2013-11-22 01:15:12 -0800 |
---|---|---|
committer | Mark Mueller <MarkKMueller@gmail.com> | 2014-01-13 09:44:30 -0800 |
commit | d5b25b9992992773acaabc9d8c90183f922347e9 (patch) | |
tree | 52e5adbde69b1be0a7c5135139b55c665384c5f6 | |
parent | 19252c59df93871f43707be18f1a25433127f051 (diff) |
Resolving piglit regressions
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_blorp.h | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 121 |
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, |