panfrost: Split the indexed and !indexed indirect draw info structs

Some fields are overlapping, so let's just split those structs to
avoid confusion.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10417>
This commit is contained in:
Boris Brezillon 2021-05-11 11:01:20 +02:00 committed by Marge Bot
parent 5d6608ef78
commit 0e74598e36
1 changed files with 24 additions and 7 deletions

View File

@ -105,6 +105,13 @@ struct indirect_draw_shader_builder {
/* Describes an indirect draw (see glDrawArraysIndirect()) */
struct indirect_draw_info {
uint32_t count;
uint32_t instance_count;
uint32_t start;
uint32_t start_instance;
};
struct indirect_indexed_draw_info {
uint32_t count;
uint32_t instance_count;
uint32_t start;
@ -280,6 +287,12 @@ update_max(struct indirect_draw_shader_builder *builder, nir_ssa_def *val)
offsetof(struct indirect_draw_info, field)), \
1, sizeof(((struct indirect_draw_info *)0)->field) * 8)
#define get_indexed_draw_field(b, draw_ptr, field) \
load_global(b, \
get_address_imm(b, draw_ptr, \
offsetof(struct indirect_indexed_draw_info, field)), \
1, sizeof(((struct indirect_indexed_draw_info *)0)->field) * 8)
static void
extract_inputs(struct indirect_draw_shader_builder *builder)
{
@ -869,16 +882,20 @@ patch(struct indirect_draw_shader_builder *builder)
nir_ssa_def *draw_ptr = builder->draw.draw_buf;
builder->draw.vertex_count = get_draw_field(b, draw_ptr, count);
assert(builder->draw.vertex_count->num_components);
builder->draw.instance_count =
get_draw_field(b, draw_ptr, instance_count);
builder->draw.vertex_start = get_draw_field(b, draw_ptr, start);
if (index_size) {
builder->draw.index_bias =
get_draw_field(b, draw_ptr, index_bias);
builder->draw.vertex_count = get_indexed_draw_field(b, draw_ptr, count);
builder->draw.instance_count =
get_indexed_draw_field(b, draw_ptr, instance_count);
builder->draw.vertex_start = get_indexed_draw_field(b, draw_ptr, start);
builder->draw.index_bias = get_indexed_draw_field(b, draw_ptr, index_bias);
} else {
builder->draw.vertex_count = get_draw_field(b, draw_ptr, count);
builder->draw.instance_count = get_draw_field(b, draw_ptr, instance_count);
builder->draw.vertex_start = get_draw_field(b, draw_ptr, start);
}
assert(builder->draw.vertex_count->num_components);
get_instance_size(builder);
builder->instance_size.padded =