[Mesa-dev] [PATCH 4/4] i965/blorp: allow all buffer formats provided src and dst match.
Kenneth Graunke
kenneth at whitecape.org
Thu Jun 7 08:44:17 CEST 2012
On 06/06/2012 12:20 PM, Paul Berry wrote:
> Previously, blits using the "blorp" mechanism only worked for 8-bit
> RGBA color buffers, 24-bit depth buffers, and 8 bit stencil buffers.
> This was not enough, because the blorp mechanism must be used for
> blitting whenever MSAA is in use. This patch allows all formats to be
> used, provided the source and destination formats match.
>
> So far I have confirmed that the following formats work properly with
> MSAA:
> - GL_RGB
> - GL_RGBA
> - GL_ALPHA
> - GL_ALPHA4
> - GL_ALPHA8
> - GL_R3_G3_B2
> - GL_RGB4
> - GL_RGB5
> - GL_RGB8
> - GL_RGB10
> - GL_RGB12
> - GL_RGB16
> - GL_RGBA2
> - GL_RGBA4
> - GL_RGB5_A1
> - GL_RGBA8
> - GL_RGB10_A2
> - GL_RGBA12
> - GL_RGBA16
>
> Fixes piglit tests "EXT_framebuffer_multisample/formats {2,4}" on
> Sandy Bridge and Ivy Bridge.
> ---
> src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 32 +++++--------------------
> 1 files changed, 7 insertions(+), 25 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> index 180468b..4de2d7a 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> @@ -151,19 +151,6 @@ try_blorp_blit(struct intel_context *intel,
> if (!src_mt) return false;
> if (buffer_bit == GL_STENCIL_BUFFER_BIT && src_mt->stencil_mt)
> src_mt = src_mt->stencil_mt;
> - switch (src_mt->format) {
> - case MESA_FORMAT_ARGB8888:
> - case MESA_FORMAT_X8_Z24:
> - case MESA_FORMAT_S8:
> - break; /* Supported */
> - default:
> - /* Unsupported format.
> - *
> - * TODO: need to support all formats that are allowed as multisample
> - * render targets.
> - */
> - return false;
> - }
>
> /* Validate destination */
> if (!dst_rb) return false;
> @@ -172,19 +159,14 @@ try_blorp_blit(struct intel_context *intel,
> if (!dst_mt) return false;
> if (buffer_bit == GL_STENCIL_BUFFER_BIT && dst_mt->stencil_mt)
> dst_mt = dst_mt->stencil_mt;
> - switch (dst_mt->format) {
> - case MESA_FORMAT_ARGB8888:
> - case MESA_FORMAT_X8_Z24:
> - case MESA_FORMAT_S8:
> - break; /* Supported */
> - default:
> - /* Unsupported format.
> - *
> - * TODO: need to support all formats that are allowed as multisample
> - * render targets.
> - */
> +
> + /* Blorp blits can't translate from one format to another. For that we'll
> + * have to fall back to the meta-op blit. Note: the meta-op blit doesn't
> + * support multisampled blits, but fortunately this is ok because
> + * multisampled blits require identical source and destination formats.
> + */
> + if (src_mt->format != dst_mt->format)
> return false;
> - }
Hey, I found it! :D Heh.
With the minor nits to 3 (or even not), this series is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Nice work.
> /* Account for the fact that in the system framebuffer, the origin is at
> * the lower left.
>
More information about the mesa-dev
mailing list