Module: Mesa Branch: main Commit: bf729063c3f09b47c6a8105d8b7417285f81ad25 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf729063c3f09b47c6a8105d8b7417285f81ad25
Author: Mike Blumenkrantz <michael.blumenkra...@gmail.com> Date: Wed Jan 10 09:41:37 2024 -0500 lavapipe: use pushconstants2 for dgc Fixes: ec656e19840 ("lavapipe: maint6") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26977> --- src/gallium/frontends/lavapipe/lvp_device.c | 4 ++-- src/gallium/frontends/lavapipe/lvp_execute.c | 16 +++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 9f739f6952e..7d590112323 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -2404,7 +2404,7 @@ lvp_nv_dgc_token_to_cmd_type(const VkIndirectCommandsLayoutTokenNV *token) assert(!"unknown token type!"); break; case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV: - return VK_CMD_PUSH_CONSTANTS; + return VK_CMD_PUSH_CONSTANTS2_KHR; case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV: return VK_CMD_BIND_INDEX_BUFFER; case VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV: @@ -2447,7 +2447,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetGeneratedCommandsMemoryRequirementsNV( size += sizeof(*cmd->u.bind_vertex_buffers2.sizes) + sizeof(*cmd->u.bind_vertex_buffers2.strides); break; case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV: - size += token->pushconstantSize; + size += token->pushconstantSize + sizeof(VkPushConstantsInfoKHR); break; case VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV: case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV: diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 360db1b682d..1fb66948d4b 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -3841,15 +3841,17 @@ process_sequence(struct rendering_state *state, } case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV: { uint32_t *data = input; - cmd_size += token->pushconstantSize; + cmd_size += token->pushconstantSize + sizeof(VkPushConstantsInfoKHR); if (max_size < size + cmd_size) abort(); - cmd->u.push_constants.layout = token->pushconstantPipelineLayout; - cmd->u.push_constants.stage_flags = token->pushconstantShaderStageFlags; - cmd->u.push_constants.offset = token->pushconstantOffset; - cmd->u.push_constants.size = token->pushconstantSize; - cmd->u.push_constants.values = (void*)cmdptr; - memcpy(cmd->u.push_constants.values, data, token->pushconstantSize); + cmd->u.push_constants2_khr.push_constants_info = (void*)cmdptr; + VkPushConstantsInfoKHR *pci = cmd->u.push_constants2_khr.push_constants_info; + pci->layout = token->pushconstantPipelineLayout; + pci->stageFlags = token->pushconstantShaderStageFlags; + pci->offset = token->pushconstantOffset; + pci->size = token->pushconstantSize; + pci->pValues = (void*)((uint8_t*)cmdptr + sizeof(VkPushConstantsInfoKHR)); + memcpy((void*)pci->pValues, data, token->pushconstantSize); break; } case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV: {