mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 09:48:07 +02:00
v3dv: implement vkCmdBindIndexBuffer2KHR
This is added with VK_KHR_maintenance5. It adds a size parameter to track the size of the index buffer data bound. Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29425>
This commit is contained in:
parent
e00da33474
commit
9912c734e9
3 changed files with 16 additions and 5 deletions
|
|
@ -3497,22 +3497,32 @@ v3dv_CmdBindVertexBuffers2(VkCommandBuffer commandBuffer,
|
|||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
v3dv_CmdBindIndexBuffer(VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
VkIndexType indexType)
|
||||
v3dv_CmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
VkDeviceSize size,
|
||||
VkIndexType indexType)
|
||||
{
|
||||
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
assert(buffer != VK_NULL_HANDLE);
|
||||
|
||||
if (size == VK_WHOLE_SIZE) {
|
||||
assert(v3dv_buffer_from_handle(buffer)->size >= offset);
|
||||
size = v3dv_buffer_from_handle(buffer)->size - offset;
|
||||
}
|
||||
|
||||
const uint32_t index_size = vk_index_type_to_bytes(indexType);
|
||||
if (buffer == cmd_buffer->state.index_buffer.buffer &&
|
||||
offset == cmd_buffer->state.index_buffer.offset &&
|
||||
size == cmd_buffer->state.index_buffer.size &&
|
||||
index_size == cmd_buffer->state.index_buffer.index_size) {
|
||||
return;
|
||||
}
|
||||
|
||||
cmd_buffer->state.index_buffer.buffer = buffer;
|
||||
cmd_buffer->state.index_buffer.offset = offset;
|
||||
cmd_buffer->state.index_buffer.size = size;
|
||||
cmd_buffer->state.index_buffer.index_size = index_size;
|
||||
cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_INDEX_BUFFER;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1499,6 +1499,7 @@ struct v3dv_cmd_buffer_state {
|
|||
struct {
|
||||
VkBuffer buffer;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize size;
|
||||
uint8_t index_size;
|
||||
} index_buffer;
|
||||
|
||||
|
|
|
|||
|
|
@ -2747,7 +2747,7 @@ v3dX(cmd_buffer_emit_index_buffer)(struct v3dv_cmd_buffer *cmd_buffer)
|
|||
assert(ibuffer->mem->bo->size >= offset);
|
||||
cl_emit(&job->bcl, INDEX_BUFFER_SETUP, ib) {
|
||||
ib.address = v3dv_cl_address(ibuffer->mem->bo, offset);
|
||||
ib.size = ibuffer->mem->bo->size - offset;
|
||||
ib.size = cmd_buffer->state.index_buffer.size;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue