Module: Mesa Branch: main Commit: 5f83571f9232a82315d800db7e5ea3ded23ce54c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f83571f9232a82315d800db7e5ea3ded23ce54c
Author: Mike Blumenkrantz <[email protected]> Date: Wed May 11 13:06:11 2022 -0400 lavapipe: fix pipeline handling for dynamic render zs state with pipeline library this is slightly more nuanced: if this is ONLY a fragment state, pDepthStencilState must exist, but if it's BOTH fragment and output, then pDepthStencilState must only exist if zs attachment is used Fixes: d4d5a7abba7 ("lavapipe: implement EXT_graphics_pipeline_library") Acked-by: Lionel Landwerlin <[email protected]> Reviewed-by: Dave Airlie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16457> --- src/gallium/frontends/lavapipe/lvp_pipeline.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c index 41122a30891..edf3e59a27e 100644 --- a/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -449,9 +449,25 @@ deep_copy_graphics_create_info(void *mem_ctx, if (shaders & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) { assert(rp_info); + bool have_output = (shaders & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) > 0; /* pDepthStencilState */ if (src->pDepthStencilState && !rasterization_disabled && - (has_depth || has_stencil)) { + /* + VUID-VkGraphicsPipelineCreateInfo-renderPass-06053 + * If renderPass is VK_NULL_HANDLE, the pipeline is being created with fragment shader + state and fragment output interface state, and either of + VkPipelineRenderingCreateInfo::depthAttachmentFormat + or + VkPipelineRenderingCreateInfo::stencilAttachmentFormat + are not VK_FORMAT_UNDEFINED, pDepthStencilState must be a valid pointer to a valid + VkPipelineDepthStencilStateCreateInfo structure + + VUID-VkGraphicsPipelineCreateInfo-renderPass-06590 + * If renderPass is VK_NULL_HANDLE and the pipeline is being created with fragment shader + state but not fragment output interface state, pDepthStencilState must be a valid pointer + to a valid VkPipelineDepthStencilStateCreateInfo structure + */ + (!have_output || has_depth || has_stencil)) { LVP_PIPELINE_DUP(dst->pDepthStencilState, src->pDepthStencilState, VkPipelineDepthStencilStateCreateInfo,
