gallium/util: implement layered framebuffer clear in u_blitter
All bound layers (from first_layer to last_layer) should be cleared. This uses a vertex shader which outputs gl_Layer = gl_InstanceID, so each instance goes to a different layer. By rendering a quad and setting the instance count to the number of layers, it will trivially clear all layers. This requires AMD_vertex_shader_layer (or PIPE_CAP_TGSI_VS_LAYER), which only radeonsi supports at the moment. r600 could do this too. Standard DX11 hardware will have to use a geometry shader though, which has higher overhead.
This commit is contained in:
@@ -365,9 +365,7 @@ static void r300_clear(struct pipe_context* pipe,
|
||||
if (buffers) {
|
||||
/* Clear using the blitter. */
|
||||
r300_blitter_begin(r300, R300_CLEAR);
|
||||
util_blitter_clear(r300->blitter,
|
||||
width,
|
||||
height,
|
||||
util_blitter_clear(r300->blitter, width, height, 1,
|
||||
buffers, color, depth, stencil);
|
||||
r300_blitter_end(r300);
|
||||
} else if (r300->zmask_clear.dirty ||
|
||||
|
Reference in New Issue
Block a user