panvk: Move VS attribute/buffer state to panvk_cmd_graphics_state

Vertex buffers/attributes and descriptor sets are orthogonal, move the
VS attrib/attrib_bufs fields to panvk_cmd_graphics_state to avoid the
confusion.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28927>
This commit is contained in:
Boris Brezillon
2024-04-23 16:56:08 +02:00
committed by Marge Bot
parent 9c6b922fe1
commit 497c43f161
2 changed files with 19 additions and 15 deletions

View File

@@ -85,8 +85,6 @@ struct panvk_descriptor_state {
mali_ptr samplers;
mali_ptr dyn_desc_ubo;
mali_ptr push_uniforms;
mali_ptr vs_attribs;
mali_ptr vs_attrib_bufs;
struct {
mali_ptr attribs;
@@ -115,6 +113,11 @@ struct panvk_cmd_graphics_state {
struct panvk_varyings_info varyings;
mali_ptr fs_rsd;
struct {
mali_ptr attribs;
mali_ptr attrib_bufs;
} vs;
struct {
struct panvk_attrib_buf bufs[MAX_VBS];
unsigned count;

View File

@@ -926,13 +926,13 @@ panvk_draw_prepare_vs_attribs(struct panvk_cmd_buffer *cmdbuf,
: 0;
unsigned attrib_count = pipeline->state.vs.attribs.attrib_count + num_imgs;
if (desc_state->vs_attribs || !attrib_count)
if (cmdbuf->state.gfx.vs.attribs || !attrib_count)
return;
if (!pipeline->state.vs.attribs.buf_count) {
panvk_prepare_img_attribs(cmdbuf, desc_state, &pipeline->base);
desc_state->vs_attrib_bufs = desc_state->img.attrib_bufs;
desc_state->vs_attribs = desc_state->img.attribs;
cmdbuf->state.gfx.vs.attrib_bufs = desc_state->img.attrib_bufs;
cmdbuf->state.gfx.vs.attribs = desc_state->img.attribs;
return;
}
@@ -977,8 +977,8 @@ panvk_draw_prepare_vs_attribs(struct panvk_cmd_buffer *cmdbuf,
memset(bufs.cpu + (pan_size(ATTRIBUTE_BUFFER) * attrib_buf_count), 0,
pan_size(ATTRIBUTE_BUFFER));
desc_state->vs_attrib_bufs = bufs.gpu;
desc_state->vs_attribs = attribs.gpu;
cmdbuf->state.gfx.vs.attrib_bufs = bufs.gpu;
cmdbuf->state.gfx.vs.attribs = attribs.gpu;
}
static void
@@ -991,8 +991,8 @@ panvk_draw_prepare_attributes(struct panvk_cmd_buffer *cmdbuf,
for (unsigned i = 0; i < ARRAY_SIZE(draw->stages); i++) {
if (i == MESA_SHADER_VERTEX) {
panvk_draw_prepare_vs_attribs(cmdbuf, draw);
draw->stages[i].attributes = desc_state->vs_attribs;
draw->stages[i].attribute_bufs = desc_state->vs_attrib_bufs;
draw->stages[i].attributes = cmdbuf->state.gfx.vs.attribs;
draw->stages[i].attribute_bufs = cmdbuf->state.gfx.vs.attrib_bufs;
} else if (pipeline->base.img_access_mask & BITFIELD_BIT(i)) {
panvk_prepare_img_attribs(cmdbuf, desc_state, &pipeline->base);
draw->stages[i].attributes = desc_state->img.attribs;
@@ -1982,7 +1982,6 @@ panvk_per_arch(CmdBindVertexBuffers)(VkCommandBuffer commandBuffer,
const VkDeviceSize *pOffsets)
{
VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer);
struct panvk_descriptor_state *desc_state = &cmdbuf->state.gfx.desc_state;
assert(firstBinding + bindingCount <= MAX_VBS);
@@ -1997,7 +1996,7 @@ panvk_per_arch(CmdBindVertexBuffers)(VkCommandBuffer commandBuffer,
cmdbuf->state.gfx.vb.count =
MAX2(cmdbuf->state.gfx.vb.count, firstBinding + bindingCount);
desc_state->vs_attrib_bufs = desc_state->vs_attribs = 0;
cmdbuf->state.gfx.vs.attrib_bufs = cmdbuf->state.gfx.vs.attribs = 0;
}
VKAPI_ATTR void VKAPI_CALL
@@ -2134,10 +2133,10 @@ panvk_per_arch(CmdBindDescriptorSets)(
descriptors_state->textures = 0;
descriptors_state->samplers = 0;
descriptors_state->dyn_desc_ubo = 0;
descriptors_state->vs_attrib_bufs = 0;
descriptors_state->img.attrib_bufs = 0;
descriptors_state->vs_attribs = 0;
descriptors_state->img.attribs = 0;
cmdbuf->state.gfx.vs.attribs = 0;
cmdbuf->state.gfx.vs.attrib_bufs = 0;
assert(dynoffset_idx == dynamicOffsetCount);
}
@@ -2257,8 +2256,10 @@ panvk_cmd_push_descriptors(struct panvk_cmd_buffer *cmdbuf,
desc_state->ubos = 0;
desc_state->textures = 0;
desc_state->samplers = 0;
desc_state->vs_attrib_bufs = desc_state->img.attrib_bufs = 0;
desc_state->vs_attribs = desc_state->img.attribs = 0;
desc_state->img.attrib_bufs = 0;
desc_state->img.attribs = 0;
cmdbuf->state.gfx.vs.attrib_bufs = 0;
cmdbuf->state.gfx.vs.attribs = 0;
return desc_state->push_sets[set];
}