On 02/04/2014 01:29 AM, Rogovin, Kevin wrote:
> 
> 
>> I don't believe our hardware can support GL_ARB_shader_stencil_export.
>> The render target write message can take RGBA, depth, and sample masks,
>> but not stencil.  Without that, it's not at all obvious how to implement it.
> 
> There is a terrible hack-ish way to do it, but I stress the word terrible and 
> hackish and
> it may not work correctly depending on the tile modes and all that fun.
> 
> Here goes. Assuming the depth-stencil is D24S8 we can do this and that the
> tile modes work out:
> 
> Bind src depth-stencil as RGBA_8UI, the depth should be in RGB and the 
> stencil in A.
> Bind the dst  depth-stencil as RGBA_8UI as well. Fragment shader is simple 
> unfiltered
> read and write to dest. If not writing to depth or stencil, mask our RGB or A 
> respectively.
> 
> The above does not handle MSAA->non-MSAA. Going further, it can be done in 
> general
> on *paper* with GL_ARB_texture_view if that is extended to allow D24S8 to be 
> on the same
> castable category as RGBA_8UI. The main catch is how the tile modes work out, 
> i.e. if the
> tile mode for a D24S8 is "compatible" with a RGBA_8UI render target.

More recent Intel GPUs only do separate stencil.  Stencil is stored in a
tile mode that the texture hardware doesn't understand.  You can modify
the texture coordinates to get the locations you want, and this is a big
part of what blorp does.

> However, I'd like to get back on the subject of the original FBO blitters: it 
> looks like that
> the plan is to use the same shader for depth or color and get the job done 
> via masking
> depth or color channels; I think that this is not optimal since then to blit 
> color and depth
> requires 2 draw calls with different state vectors. Those differences in 
> state vector will
> likely do amusing things in a driver, typically a stall between calls and 
> quite likely a different
> shader bits to driver because of the masking. For the use case of most or all 
> the screen blit
> this is ok, but for lots of small blits this is likely bad. So, it would be 
> much better to use
> a distinct shader for each of the 3 possibilities to drop the draw call and 
> state change count.

If the application does a depth-only blit, we have to disable color
writes (or not attach the color surface) in meta anyway.  Similarly for
color-only blits.  If we don't write color in the shader, the hardware
still tries to write to the color buffer... it just tries to write garbage.

> -Kevin
> 
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to