lavapipe: Fix DGC vertex buffer handling
Fixes: 976dd26
("lavapipe: NV_device_generated_commands")
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27019>
This commit is contained in:

committed by
Marge Bot

parent
e83ef27ba6
commit
6d88c1bb6c
@@ -3871,7 +3871,7 @@ process_sequence(struct rendering_state *state,
|
||||
}
|
||||
case VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV: {
|
||||
VkBindVertexBufferIndirectCommandNV *data = input;
|
||||
cmd_size += sizeof(*cmd->u.bind_vertex_buffers.buffers) + sizeof(*cmd->u.bind_vertex_buffers.offsets);
|
||||
cmd_size += sizeof(*cmd->u.bind_vertex_buffers2.buffers) + sizeof(*cmd->u.bind_vertex_buffers2.offsets);
|
||||
cmd_size += sizeof(*cmd->u.bind_vertex_buffers2.sizes) + sizeof(*cmd->u.bind_vertex_buffers2.strides);
|
||||
if (max_size < size + cmd_size)
|
||||
abort();
|
||||
@@ -3880,12 +3880,20 @@ process_sequence(struct rendering_state *state,
|
||||
cmd->u.bind_vertex_buffers2.binding_count = 1;
|
||||
|
||||
cmd->u.bind_vertex_buffers2.buffers = (void*)cmdptr;
|
||||
cmd->u.bind_vertex_buffers2.offsets = (void*)(cmdptr + sizeof(*cmd->u.bind_vertex_buffers2.buffers));
|
||||
uint32_t alloc_offset = sizeof(*cmd->u.bind_vertex_buffers2.buffers);
|
||||
|
||||
cmd->u.bind_vertex_buffers2.offsets = (void*)(cmdptr + alloc_offset);
|
||||
alloc_offset += sizeof(*cmd->u.bind_vertex_buffers2.offsets);
|
||||
|
||||
cmd->u.bind_vertex_buffers2.sizes = (void*)(cmdptr + alloc_offset);
|
||||
alloc_offset += sizeof(*cmd->u.bind_vertex_buffers2.sizes);
|
||||
|
||||
cmd->u.bind_vertex_buffers2.offsets[0] = 0;
|
||||
cmd->u.bind_vertex_buffers2.buffers[0] = data->bufferAddress ? get_buffer(state, (void*)(uintptr_t)data->bufferAddress, (size_t*)&cmd->u.bind_vertex_buffers2.offsets[0]) : VK_NULL_HANDLE;
|
||||
cmd->u.bind_vertex_buffers2.sizes[0] = data->size;
|
||||
|
||||
if (token->vertexDynamicStride) {
|
||||
cmd->u.bind_vertex_buffers2.strides = (void*)(cmdptr + sizeof(*cmd->u.bind_vertex_buffers2.buffers) + sizeof(*cmd->u.bind_vertex_buffers2.offsets) + sizeof(*cmd->u.bind_vertex_buffers2.sizes));
|
||||
cmd->u.bind_vertex_buffers2.strides = (void*)(cmdptr + alloc_offset);
|
||||
cmd->u.bind_vertex_buffers2.strides[0] = data->stride;
|
||||
} else {
|
||||
cmd->u.bind_vertex_buffers2.strides = NULL;
|
||||
|
Reference in New Issue
Block a user