radeonsi: compile clear and copy buffer compute shaders on demand
same as all other shaders
This commit is contained in:
parent
f139589069
commit
c605738113
|
@ -111,12 +111,20 @@ static void si_compute_do_clear_or_copy(struct si_context *sctx,
|
||||||
sb[0].buffer_offset = dst_offset;
|
sb[0].buffer_offset = dst_offset;
|
||||||
sb[0].buffer_size = size;
|
sb[0].buffer_size = size;
|
||||||
|
|
||||||
|
bool shader_dst_stream_policy = SI_COMPUTE_DST_CACHE_POLICY != L2_LRU;
|
||||||
|
|
||||||
if (src) {
|
if (src) {
|
||||||
sb[1].buffer = src;
|
sb[1].buffer = src;
|
||||||
sb[1].buffer_offset = src_offset;
|
sb[1].buffer_offset = src_offset;
|
||||||
sb[1].buffer_size = size;
|
sb[1].buffer_size = size;
|
||||||
|
|
||||||
ctx->set_shader_buffers(ctx, PIPE_SHADER_COMPUTE, 0, 2, sb);
|
ctx->set_shader_buffers(ctx, PIPE_SHADER_COMPUTE, 0, 2, sb);
|
||||||
|
|
||||||
|
if (!sctx->cs_copy_buffer) {
|
||||||
|
sctx->cs_copy_buffer = si_create_dma_compute_shader(&sctx->b,
|
||||||
|
SI_COMPUTE_COPY_DW_PER_THREAD,
|
||||||
|
shader_dst_stream_policy, true);
|
||||||
|
}
|
||||||
ctx->bind_compute_state(ctx, sctx->cs_copy_buffer);
|
ctx->bind_compute_state(ctx, sctx->cs_copy_buffer);
|
||||||
} else {
|
} else {
|
||||||
assert(clear_value_size >= 4 &&
|
assert(clear_value_size >= 4 &&
|
||||||
|
@ -127,6 +135,12 @@ static void si_compute_do_clear_or_copy(struct si_context *sctx,
|
||||||
sctx->cs_user_data[i] = clear_value[i % (clear_value_size / 4)];
|
sctx->cs_user_data[i] = clear_value[i % (clear_value_size / 4)];
|
||||||
|
|
||||||
ctx->set_shader_buffers(ctx, PIPE_SHADER_COMPUTE, 0, 1, sb);
|
ctx->set_shader_buffers(ctx, PIPE_SHADER_COMPUTE, 0, 1, sb);
|
||||||
|
|
||||||
|
if (!sctx->cs_clear_buffer) {
|
||||||
|
sctx->cs_clear_buffer = si_create_dma_compute_shader(&sctx->b,
|
||||||
|
SI_COMPUTE_CLEAR_DW_PER_THREAD,
|
||||||
|
shader_dst_stream_policy, false);
|
||||||
|
}
|
||||||
ctx->bind_compute_state(ctx, sctx->cs_clear_buffer);
|
ctx->bind_compute_state(ctx, sctx->cs_clear_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -510,14 +510,6 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
|
||||||
if (sscreen->debug_flags & DBG(FORCE_DMA))
|
if (sscreen->debug_flags & DBG(FORCE_DMA))
|
||||||
sctx->b.resource_copy_region = sctx->dma_copy;
|
sctx->b.resource_copy_region = sctx->dma_copy;
|
||||||
|
|
||||||
bool dst_stream_policy = SI_COMPUTE_DST_CACHE_POLICY != L2_LRU;
|
|
||||||
sctx->cs_clear_buffer = si_create_dma_compute_shader(&sctx->b,
|
|
||||||
SI_COMPUTE_CLEAR_DW_PER_THREAD,
|
|
||||||
dst_stream_policy, false);
|
|
||||||
sctx->cs_copy_buffer = si_create_dma_compute_shader(&sctx->b,
|
|
||||||
SI_COMPUTE_COPY_DW_PER_THREAD,
|
|
||||||
dst_stream_policy, true);
|
|
||||||
|
|
||||||
sctx->blitter = util_blitter_create(&sctx->b);
|
sctx->blitter = util_blitter_create(&sctx->b);
|
||||||
if (sctx->blitter == NULL)
|
if (sctx->blitter == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
Loading…
Reference in New Issue