desc->list = CALLOC(num_elements, element_dw_size * 4);
desc->element_dw_size = element_dw_size;
desc->num_elements = num_elements;
- desc->list_dirty = true; /* upload the list before the next draw */
+ desc->dirty_mask = num_elements == 64 ? ~0llu : (1llu << num_elements) - 1;
desc->shader_userdata_offset = shader_userdata_index * 4;
if (ce_offset) {
unsigned list_size = desc->num_elements * desc->element_dw_size * 4;
void *ptr;
- if (!desc->list_dirty)
+ if (!desc->dirty_mask)
return true;
u_upload_alloc(sctx->b.uploader, 0, list_size, 256,
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, desc->buffer,
RADEON_USAGE_READ, RADEON_PRIO_DESCRIPTORS);
- desc->list_dirty = false;
+ desc->dirty_mask = 0;
desc->pointer_dirty = true;
si_mark_atom_dirty(sctx, &sctx->shader_userdata.atom);
return true;
si_sampler_view_add_buffer(sctx, views->views[i]->texture);
}
+ views->desc.ce_ram_dirty = true;
+
if (!views->desc.buffer)
return;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, views->desc.buffer,
views->desc.enabled_mask &= ~(1llu << slot);
}
- views->desc.list_dirty = true;
+ views->desc.dirty_mask |= 1llu << slot;
}
static bool is_compressed_colortex(struct r600_texture *rtex)
si_sampler_view_add_buffer(sctx, view->resource);
}
+ images->desc.ce_ram_dirty = true;
+
if (images->desc.buffer) {
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
images->desc.buffer,
memcpy(images->desc.list + slot*8, null_image_descriptor, 8*4);
images->desc.enabled_mask &= ~(1llu << slot);
- images->desc.list_dirty = true;
+ images->desc.dirty_mask |= 1llu << slot;
}
}
}
images->desc.enabled_mask |= 1llu << slot;
- images->desc.list_dirty = true;
+ images->desc.dirty_mask |= 1llu << slot;
}
}
continue;
memcpy(desc->list + slot * 16 + 12, sstates[i]->val, 4*4);
- desc->list_dirty = true;
+ desc->dirty_mask |= 1llu << slot;
}
}
buffers->shader_usage, buffers->priority);
}
+ buffers->desc.ce_ram_dirty = true;
+
if (!buffers->desc.buffer)
return;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
buffers->desc.enabled_mask &= ~(1llu << slot);
}
- buffers->desc.list_dirty = true;
+ buffers->desc.dirty_mask |= 1llu << slot;
}
/* SHADER BUFFERS */
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, buf,
buffers->shader_usage, buffers->priority);
buffers->desc.enabled_mask |= 1llu << slot;
+ buffers->desc.dirty_mask |= 1llu << slot;
}
- buffers->desc.list_dirty = true;
}
/* RING BUFFERS */
buffers->desc.enabled_mask &= ~(1llu << slot);
}
- buffers->desc.list_dirty = true;
+ buffers->desc.dirty_mask |= 1llu << slot;
}
/* STREAMOUT BUFFERS */
NULL);
buffers->desc.enabled_mask &= ~(1llu << bufidx);
}
+ buffers->desc.dirty_mask |= 1llu << bufidx;
}
for (; i < old_num_targets; i++) {
bufidx = SI_SO_BUF_OFFSET + i;
memset(buffers->desc.list + bufidx*4, 0, sizeof(uint32_t) * 4);
pipe_resource_reference(&buffers->buffers[bufidx], NULL);
buffers->desc.enabled_mask &= ~(1llu << bufidx);
+ buffers->desc.dirty_mask |= 1llu << bufidx;
}
- buffers->desc.list_dirty = true;
}
static void si_desc_reset_buffer_offset(struct pipe_context *ctx,
si_desc_reset_buffer_offset(&sctx->b.b,
buffers->desc.list + i*4,
old_va, buf);
- buffers->desc.list_dirty = true;
+ buffers->desc.dirty_mask |= 1llu << i;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
(struct r600_resource *)buf,
if (buffers->buffers[i] == buf) {
si_desc_reset_buffer_offset(ctx, buffers->desc.list + i*4,
old_va, buf);
- buffers->desc.list_dirty = true;
+ buffers->desc.dirty_mask |= 1llu << i;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
rbuffer, buffers->shader_usage,
views->desc.list +
i * 16 + 4,
old_va, buf);
- views->desc.list_dirty = true;
+ views->desc.dirty_mask |= 1llu << i;
radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
rbuffer, RADEON_USAGE_READ,
si_desc_reset_buffer_offset(
ctx, images->desc.list + i * 8 + 4,
old_va, buf);
- images->desc.list_dirty = true;
+ images->desc.dirty_mask |= 1llu << i;
radeon_add_to_buffer_list(
&sctx->b, &sctx->b.gfx, rbuffer,