mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
lavapipe: fix renderpass info handling during pipeline creation
only the viewMask parameter of VkPipelineRenderingCreateInfoKHR can
be accessed in the fragment stage, so for pipeline libraries it should
be assumed that zs attachments exist for the purpose of copying dynamic
state values, and then these dynamic states will naturally be pruned
during final pipeline construction if the attachments turn out to not
be present
cc: mesa-stable
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17219>
(cherry picked from commit 2a69aeb9c1)
This commit is contained in:
parent
d5bcbab926
commit
ddaadc3da0
2 changed files with 11 additions and 5 deletions
|
|
@ -292,7 +292,7 @@
|
|||
"description": "lavapipe: fix renderpass info handling during pipeline creation",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -393,7 +393,7 @@ deep_copy_graphics_create_info(void *mem_ctx,
|
|||
dst->pNext = NULL;
|
||||
dst->flags = src->flags;
|
||||
dst->layout = src->layout;
|
||||
if (shaders & (VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT | VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT)) {
|
||||
if (shaders & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT) {
|
||||
assert(!dst->renderPass || !src->renderPass || dst->renderPass == src->renderPass);
|
||||
assert(!dst->subpass || !src->subpass || dst->subpass == src->subpass);
|
||||
dst->subpass = src->subpass;
|
||||
|
|
@ -411,6 +411,14 @@ deep_copy_graphics_create_info(void *mem_ctx,
|
|||
if (rp_info) {
|
||||
has_depth = rp_info->depthAttachmentFormat != VK_FORMAT_UNDEFINED;
|
||||
has_stencil = rp_info->stencilAttachmentFormat != VK_FORMAT_UNDEFINED;
|
||||
} else if ((shaders & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) &&
|
||||
(shaders ^ VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_OUTPUT_INTERFACE_BIT_EXT)) {
|
||||
/* if this is a fragment stage without a fragment output,
|
||||
* assume both of these exist so the dynamic states are covered,
|
||||
* then let them be naturally pruned in the final pipeline
|
||||
*/
|
||||
has_depth = true;
|
||||
has_stencil = true;
|
||||
}
|
||||
dst->basePipelineHandle = src->basePipelineHandle;
|
||||
dst->basePipelineIndex = src->basePipelineIndex;
|
||||
|
|
@ -494,8 +502,6 @@ 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 &&
|
||||
/*
|
||||
|
|
@ -513,7 +519,7 @@ deep_copy_graphics_create_info(void *mem_ctx,
|
|||
state but not fragment output interface state, pDepthStencilState must be a valid pointer
|
||||
to a valid VkPipelineDepthStencilStateCreateInfo structure
|
||||
*/
|
||||
(!have_output || has_depth || has_stencil)) {
|
||||
(has_depth || has_stencil)) {
|
||||
LVP_PIPELINE_DUP(dst->pDepthStencilState,
|
||||
src->pDepthStencilState,
|
||||
VkPipelineDepthStencilStateCreateInfo,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue