On 10/07/2013 04:31 PM, Kenneth Graunke wrote: > BLORP performs blits by drawing a rectangle with a shader that samples > from the source texture, and writes color data to the destination. > > The sampler always returns 32-bit RGBA float data, regardless of the > source format's component ordering or data type. Likewise, the render > target write message takes 32-bit RGBA float data, and converts it > appropriately. So the bulk of the work is already taken care of for us. > > This greatly accelerates a lot of blits and CopyTexSubImage calls, and > makes Legends of Aethereus playable on Ivybridge. At the default > settings, LOA continually blits between SRGBA8888 (the window format) > and RGBA16_FLOAT. Since neither BLORP nor our BLT paths supported this, > it fell back to meta, spending 33% of the CPU in floorf() converting > between floats and half-floats. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > index 2427085..c44f7c4 100644 > --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > @@ -353,10 +353,23 @@ brw_blorp_copytexsubimage(struct brw_context *brw, > if (brw->gen < 6) > return false; > > - if (!color_formats_match(src_mt->format, dst_mt->format)) { > + if (_mesa_get_format_base_format(src_mt->format) != > + _mesa_get_format_base_format(dst_mt->format)) { > return false; > } > > + /* We can't handle format conversions between Z24 and other formats since > + * we have to lie about the surface format. See the comments in > + * brw_blorp_surface_info::set(). > + */ > + if ((src_mt->format == MESA_FORMAT_X8_Z24) ^ > + (dst_mt->format == MESA_FORMAT_X8_Z24)) {
You can use != instead of ^ here. > + return false; > + } > + > + if (!brw->format_supported_as_render_target[dst_mt->format]) > + return false; > + > /* Source clipping shouldn't be necessary, since copytexsubimage (in > * src/mesa/main/teximage.c) calls _mesa_clip_copytexsubimage() which > * takes care of it. > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev