diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index f4c9d3342fd..dc42c3f3af2 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -3421,21 +3421,28 @@ v3dv_CmdPipelineBarrier2(VkCommandBuffer commandBuffer, } VKAPI_ATTR void VKAPI_CALL -v3dv_CmdBindVertexBuffers(VkCommandBuffer commandBuffer, - uint32_t firstBinding, - uint32_t bindingCount, - const VkBuffer *pBuffers, - const VkDeviceSize *pOffsets) +v3dv_CmdBindVertexBuffers2(VkCommandBuffer commandBuffer, + uint32_t firstBinding, + uint32_t bindingCount, + const VkBuffer *pBuffers, + const VkDeviceSize *pOffsets, + const VkDeviceSize *pSizes, + const VkDeviceSize *pStrides) { V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer); struct v3dv_vertex_binding *vb = cmd_buffer->state.vertex_bindings; - /* We have to defer setting up vertex buffer since we need the buffer - * stride from the pipeline. - */ - assert(firstBinding + bindingCount <= MAX_VBS); bool vb_state_changed = false; + if (pStrides) { + vk_cmd_set_vertex_binding_strides(&cmd_buffer->vk, + firstBinding, bindingCount, + pStrides); + struct vk_dynamic_graphics_state *dyn = &cmd_buffer->vk.dynamic_graphics_state; + if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VI_BINDING_STRIDES)) + vb_state_changed = true; + } + /* FIXME: at this moment we don't do any thing with pSizes. */ for (uint32_t i = 0; i < bindingCount; i++) { if (vb[firstBinding + i].buffer != v3dv_buffer_from_handle(pBuffers[i])) { vb[firstBinding + i].buffer = v3dv_buffer_from_handle(pBuffers[i]); diff --git a/src/broadcom/vulkan/v3dvx_cmd_buffer.c b/src/broadcom/vulkan/v3dvx_cmd_buffer.c index 873b912314e..7fb6f998701 100644 --- a/src/broadcom/vulkan/v3dvx_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dvx_cmd_buffer.c @@ -2486,6 +2486,8 @@ v3dX(cmd_buffer_emit_gl_shader_state)(struct v3dv_cmd_buffer *cmd_buffer) cs_loaded_any = true; } + attr.stride = + cmd_buffer->vk.dynamic_graphics_state.vi_binding_strides[binding]; attr.maximum_index = 0xffffff; } diff --git a/src/broadcom/vulkan/v3dvx_pipeline.c b/src/broadcom/vulkan/v3dvx_pipeline.c index a1db7ac6afd..9ec25340dd7 100644 --- a/src/broadcom/vulkan/v3dvx_pipeline.c +++ b/src/broadcom/vulkan/v3dvx_pipeline.c @@ -656,7 +656,6 @@ pack_shader_state_attribute_record(struct v3dv_pipeline *pipeline, attr.instance_divisor = MIN2(pipeline->vb[binding].instance_divisor, 0xffff); - attr.stride = pipeline->vb[binding].stride; attr.type = get_attr_type(desc); } }