[Mesa-dev] [PATCH v2 4/5] i965/gen6+: Add code to perform blits on the render path ("blorp").

Chad Versace chad.versace at linux.intel.com
Fri May 11 12:34:18 PDT 2012


On 05/10/2012 11:21 AM, Paul Berry wrote:
> This patch expands the "blorp" component to be able to perform blits
> as well as HiZ resolves.  The new blitting code is located in
> brw_blorp_blit.cpp.  This includes the necessary fragment shader code
> to look up pixels in the source buffer (which is configured as a
> texture) and output them to the destination buffer (which is
> configured as the render target).
> 
> Most of the time the fragment shader code is simple and
> straightforward, since it merely has to apply a coordinate offset,
> read from the texture, and write to the render target.  However, in
> the case of blitting stencil buffers, things are more complicated,
> since the GPU stores stencil data using W tiling, and W tiling is not
> supported for textures or render targets.  So, we set up the stencil
> buffers as Y tiled, and emit fragment shader code that adjusts the
> coordinates to account for the difference between W and Y tiling.
> Furthermore, since a rectangular region in W tiling does not
> necessarily correspond to a rectangular region in Y tiling, we widen
> the rectangle primitive to the nearest tile boundary and have the
> fragment shader "kill" any pixels that don't fall inside the actual
> desired destination rectangle.
> 
> All of this is a necessary prerequisite for implementing MSAA, since
> we'll need to be able to blit between multisample color, depth, and
> stencil buffers and their non-multisampled counterparts, and none of
> the existing blitting mechanisms support multisampling.
> 
> In addition, the new blitting code should speed up operations where we
> previously fell back to software rasterization, such as blitting of
> stencil buffers.  The current fallback sequence is: first we try to do
> a blit using the hardware blitting engine.  If that fails we try to do
> a blit using the render path.  If that also fails then we do the blit
> using a meta-op (which may or may not fall back to software
> rasterization).
> 
> Note that blitting using the render path has some limitations at the
> moment: it only supports a few formats, and it doesn't support
> clipping or scissoring.  These limitations will be addressed in future
> patch series.
> 
> v2:
> - Add the code that configures the WM program to
>   gen{6,7}_emit_wm_config() and gen7_emit_ps_config() rather than
>   creating separate ...enable() functions.
> - Call intel_prepare_render before determining which miptrees we are
>   blitting from/to, because it may cause miptrees to be reallocated.
> - Allow the blit to mirror X and/or Y coordinates.
> - Disable blorp blits on Gen7 for now, since they aren't working yet.
> ---
>  src/mesa/drivers/dri/i965/Makefile.sources   |    1 +
>  src/mesa/drivers/dri/i965/brw_blorp.cpp      |   32 +-
>  src/mesa/drivers/dri/i965/brw_blorp.h        |  136 ++++-
>  src/mesa/drivers/dri/i965/brw_blorp_blit.cpp |  863 ++++++++++++++++++++++++++
>  src/mesa/drivers/dri/i965/brw_context.h      |    8 +
>  src/mesa/drivers/dri/i965/gen6_blorp.cpp     |  397 +++++++++++-
>  src/mesa/drivers/dri/i965/gen7_blorp.cpp     |  311 +++++++++-
>  src/mesa/drivers/dri/intel/intel_fbo.c       |    9 +
>  8 files changed, 1730 insertions(+), 27 deletions(-)
>  create mode 100644 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp

I tried to review this, and discovered that I'm not qualified to review blit code.

----
Chad Versace
chad.versace at linux.intel.com


More information about the mesa-dev mailing list