diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index c9ec7651afa..f7267e538be 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -49,12 +49,12 @@ struct panvk_draw_info { } index; struct { - uint32_t base; + int32_t base; uint32_t count; } vertex; struct { - uint32_t base; + int32_t base; uint32_t count; } instance; @@ -1836,6 +1836,14 @@ panvk_per_arch(CmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, if (instanceCount == 0 || vertexCount == 0) return; + /* gl_BaseVertexARB is a signed integer, and it should expose the value of + * firstVertex in a non-indexed draw. */ + assert(firstVertex < INT32_MAX); + + /* gl_BaseInstance is a signed integer, and it should expose the value of + * firstInstnace. */ + assert(firstInstance < INT32_MAX); + struct panvk_draw_info draw = { .vertex.base = firstVertex, .vertex.count = vertexCount, @@ -1857,10 +1865,14 @@ panvk_per_arch(CmdDrawIndexed)(VkCommandBuffer commandBuffer, if (instanceCount == 0 || indexCount == 0) return; + /* gl_BaseInstance is a signed integer, and it should expose the value of + * firstInstnace. */ + assert(firstInstance < INT32_MAX); + struct panvk_draw_info draw = { .index.size = cmdbuf->state.gfx.ib.index_size, .index.offset = firstIndex, - .vertex.base = (uint32_t)vertexOffset, + .vertex.base = vertexOffset, .vertex.count = indexCount, .instance.count = instanceCount, .instance.base = firstInstance, diff --git a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c index f22206b2efe..ca64299a591 100644 --- a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c @@ -47,7 +47,7 @@ struct panvk_draw_info { unsigned first_instance; unsigned instance_count; int vertex_offset; - unsigned offset_start; + int offset_start; uint32_t layer_id; struct mali_invocation_packed invocation; struct { @@ -1423,6 +1423,14 @@ panvk_per_arch(CmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, if (instanceCount == 0 || vertexCount == 0) return; + /* gl_BaseVertexARB is a signed integer, and it should expose the value of + * firstVertex in a non-indexed draw. */ + assert(firstVertex < INT32_MAX); + + /* gl_BaseInstance is a signed integer, and it should expose the value of + * firstInstnace. */ + assert(firstInstance < INT32_MAX); + struct panvk_draw_info draw = { .first_vertex = firstVertex, .vertex_count = vertexCount, @@ -1498,6 +1506,10 @@ panvk_per_arch(CmdDrawIndexed)(VkCommandBuffer commandBuffer, if (instanceCount == 0 || indexCount == 0) return; + /* gl_BaseInstance is a signed integer, and it should expose the value of + * firstInstnace. */ + assert(firstInstance < INT32_MAX); + const struct vk_input_assembly_state *ia = &cmdbuf->vk.dynamic_graphics_state.ia; bool primitive_restart = ia->primitive_restart_enable; diff --git a/src/panfrost/vulkan/panvk_shader.h b/src/panfrost/vulkan/panvk_shader.h index fc9494487d2..ab56398ece3 100644 --- a/src/panfrost/vulkan/panvk_shader.h +++ b/src/panfrost/vulkan/panvk_shader.h @@ -63,8 +63,8 @@ struct panvk_graphics_sysvals { } blend; struct { - uint32_t first_vertex; - uint32_t base_instance; + int32_t first_vertex; + int32_t base_instance; uint32_t noperspective_varyings; } vs;