return true;
}
-static void si_reinitialize_ce_ram(struct si_context *sctx,
+static void si_ce_reinitialize_descriptors(struct si_context *sctx,
struct si_descriptors *desc)
{
if (desc->buffer) {
desc->ce_ram_dirty = false;
}
+void si_ce_reinitialize_all_descriptors(struct si_context *sctx)
+{
+ for (int i = 0; i < SI_NUM_SHADERS; i++) {
+ si_ce_reinitialize_descriptors(sctx, &sctx->const_buffers[i].desc);
+ si_ce_reinitialize_descriptors(sctx, &sctx->shader_buffers[i].desc);
+ si_ce_reinitialize_descriptors(sctx, &sctx->samplers[i].views.desc);
+ si_ce_reinitialize_descriptors(sctx, &sctx->images[i].desc);
+ }
+ si_ce_reinitialize_descriptors(sctx, &sctx->rw_buffers.desc);
+}
+
void si_ce_enable_loads(struct radeon_winsys_cs *ib)
{
radeon_emit(ib, PKT3(PKT3_CONTEXT_CONTROL, 1, 0));
uint32_t const* list = (uint32_t const*)desc->list;
if (desc->ce_ram_dirty)
- si_reinitialize_ce_ram(sctx, desc);
+ si_ce_reinitialize_descriptors(sctx, desc);
while(desc->dirty_mask) {
int begin, count;
else if (ctx->ce_ib)
si_ce_enable_loads(ctx->ce_ib);
+ if (ctx->ce_preamble_ib)
+ si_ce_reinitialize_all_descriptors(ctx);
+
ctx->framebuffer.dirty_cbufs = (1 << 8) - 1;
ctx->framebuffer.dirty_zsbuf = true;
si_mark_atom_dirty(ctx, &ctx->framebuffer.atom);
} while(0)
/* si_descriptors.c */
+void si_ce_reinitialize_all_descriptors(struct si_context *sctx);
void si_ce_enable_loads(struct radeon_winsys_cs *ib);
void si_set_ring_buffer(struct pipe_context *ctx, uint slot,
struct pipe_resource *buffer,