diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.h b/src/nouveau/vulkan/nvk_cmd_buffer.h index 6dc55668d99..3fae45675b8 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.h +++ b/src/nouveau/vulkan/nvk_cmd_buffer.h @@ -365,6 +365,7 @@ nvk_cmd_buffer_get_cbuf_descriptor_addr(struct nvk_cmd_buffer *cmd, const struct nvk_cbuf *cbuf); VkResult nvk_cmd_flush_cs_qmd(struct nvk_cmd_buffer *cmd, + const struct nvk_cmd_state *state, uint32_t global_size[3], uint64_t *qmd_addr_out, uint64_t *root_desc_addr_out); diff --git a/src/nouveau/vulkan/nvk_cmd_dispatch.c b/src/nouveau/vulkan/nvk_cmd_dispatch.c index 1dd56bb375c..0b27fd3d0df 100644 --- a/src/nouveau/vulkan/nvk_cmd_dispatch.c +++ b/src/nouveau/vulkan/nvk_cmd_dispatch.c @@ -202,13 +202,14 @@ nvk_cmd_upload_qmd(struct nvk_cmd_buffer *cmd, VkResult nvk_cmd_flush_cs_qmd(struct nvk_cmd_buffer *cmd, + const struct nvk_cmd_state *state, uint32_t global_size[3], uint64_t *qmd_addr_out, uint64_t *root_desc_addr_out) { - struct nvk_descriptor_state *desc = &cmd->state.cs.descriptors; + const struct nvk_descriptor_state *desc = &state->cs.descriptors; - return nvk_cmd_upload_qmd(cmd, cmd->state.cs.shader, + return nvk_cmd_upload_qmd(cmd, state->cs.shader, desc, (void *)desc->root, global_size, qmd_addr_out, root_desc_addr_out); } @@ -257,7 +258,8 @@ nvk_CmdDispatchBase(VkCommandBuffer commandBuffer, nvk_flush_compute_state(cmd, base_workgroup, global_size); uint64_t qmd_addr = 0; - VkResult result = nvk_cmd_flush_cs_qmd(cmd, global_size, &qmd_addr, NULL); + VkResult result = nvk_cmd_flush_cs_qmd(cmd, &cmd->state, global_size, + &qmd_addr, NULL); if (result != VK_SUCCESS) { vk_command_buffer_set_error(&cmd->vk, result); return; @@ -496,8 +498,8 @@ nvk_CmdDispatchIndirect(VkCommandBuffer commandBuffer, nvk_flush_compute_state(cmd, base_workgroup, global_size); uint64_t qmd_addr = 0, root_desc_addr = 0; - VkResult result = nvk_cmd_flush_cs_qmd(cmd, global_size, &qmd_addr, - &root_desc_addr); + VkResult result = nvk_cmd_flush_cs_qmd(cmd, &cmd->state, global_size, + &qmd_addr, &root_desc_addr); if (result != VK_SUCCESS) { vk_command_buffer_set_error(&cmd->vk, result); return; diff --git a/src/nouveau/vulkan/nvk_cmd_indirect.c b/src/nouveau/vulkan/nvk_cmd_indirect.c index ff35251bc69..e87c839546a 100644 --- a/src/nouveau/vulkan/nvk_cmd_indirect.c +++ b/src/nouveau/vulkan/nvk_cmd_indirect.c @@ -947,8 +947,8 @@ nvk_cmd_process_cmds(struct nvk_cmd_buffer *cmd, uint64_t qmd_addr = 0; if (layout->stages & VK_SHADER_STAGE_COMPUTE_BIT) { uint32_t global_size[3] = { 0, 0, 0 }; - VkResult result = nvk_cmd_flush_cs_qmd(cmd, global_size, &qmd_addr, - &push.root_addr); + VkResult result = nvk_cmd_flush_cs_qmd(cmd, state, global_size, + &qmd_addr, &push.root_addr); if (unlikely(result != VK_SUCCESS)) { vk_command_buffer_set_error(&cmd->vk, result); return;