radeonsi: add assertion requiring binding vertex elements before vertex_buffers
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27736>
This commit is contained in:
@@ -2042,7 +2042,12 @@ void si_shader_pointers_mark_dirty(struct si_context *sctx)
|
||||
{
|
||||
sctx->shader_pointers_dirty =
|
||||
u_bit_consecutive(SI_DESCS_FIRST_SHADER, SI_NUM_DESCS - SI_DESCS_FIRST_SHADER);
|
||||
sctx->vertex_buffers_dirty = sctx->num_vertex_elements > 0;
|
||||
sctx->vertex_buffers_dirty = sctx->num_vertex_elements > 0 &&
|
||||
/* si_draw_rectangle doesn't bind vertex elements, so we shouldn't
|
||||
* mark vertex buffers as dirty. We can get here due to
|
||||
* si_need_gfx_cs_space. */
|
||||
(!sctx->shader.vs.cso ||
|
||||
!sctx->shader.vs.cso->info.base.vs.blit_sgprs_amd);
|
||||
si_mark_atom_dirty(sctx, &sctx->atoms.s.gfx_shader_pointers);
|
||||
sctx->graphics_internal_bindings_pointer_dirty = sctx->descriptors[SI_DESCS_INTERNAL].buffer != NULL;
|
||||
sctx->compute_internal_bindings_pointer_dirty = sctx->descriptors[SI_DESCS_INTERNAL].buffer != NULL;
|
||||
|
@@ -1089,6 +1089,7 @@ struct si_context {
|
||||
unsigned num_vertex_elements;
|
||||
unsigned cs_max_waves_per_sh;
|
||||
uint32_t compute_tmpring_size;
|
||||
bool vertex_elements_but_no_buffers;
|
||||
bool uses_nontrivial_vs_inputs;
|
||||
bool force_trivial_vs_inputs;
|
||||
bool do_update_shaders;
|
||||
|
@@ -4617,6 +4617,9 @@ static void si_bind_vertex_elements(struct pipe_context *ctx, void *state)
|
||||
sctx->vertex_elements = v;
|
||||
sctx->num_vertex_elements = v->count;
|
||||
sctx->vertex_buffers_dirty = sctx->num_vertex_elements > 0;
|
||||
#ifndef NDEBUG
|
||||
sctx->vertex_elements_but_no_buffers = v->count > 0;
|
||||
#endif
|
||||
|
||||
if (old->instance_divisor_is_one != v->instance_divisor_is_one ||
|
||||
old->instance_divisor_is_fetched != v->instance_divisor_is_fetched ||
|
||||
@@ -4697,6 +4700,9 @@ static void si_set_vertex_buffers(struct pipe_context *ctx, unsigned count,
|
||||
sctx->num_vertex_buffers = count;
|
||||
sctx->vertex_buffers_dirty = sctx->num_vertex_elements > 0;
|
||||
sctx->vertex_buffer_unaligned = unaligned;
|
||||
#ifndef NDEBUG
|
||||
sctx->vertex_elements_but_no_buffers = false;
|
||||
#endif
|
||||
|
||||
/* Check whether alignment may have changed in a way that requires
|
||||
* shader changes. This check is conservative: a vertex buffer can only
|
||||
|
@@ -1817,6 +1817,7 @@ static bool si_upload_and_prefetch_VB_descriptors(struct si_context *sctx,
|
||||
|
||||
if (sctx->vertex_buffers_dirty || IS_DRAW_VERTEX_STATE) {
|
||||
assert(count || IS_DRAW_VERTEX_STATE);
|
||||
assert(IS_DRAW_VERTEX_STATE || !sctx->vertex_elements_but_no_buffers);
|
||||
|
||||
struct si_vertex_elements *velems = sctx->vertex_elements;
|
||||
unsigned alloc_size = IS_DRAW_VERTEX_STATE ?
|
||||
|
Reference in New Issue
Block a user