nvk: Pull shaders from the state command buffer in nvk_cmd_process_cmds()

Found by the VKD3D test suite.

Fixes: 976f22a5da ("nvk: Implement CmdProcess/ExecuteGeneratedCommandsEXT")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33610>
This commit is contained in:
Faith Ekstrand 2025-02-18 10:18:40 -06:00 committed by Marge Bot
parent 55bdae03cc
commit 39ae06e153
3 changed files with 10 additions and 7 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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;