From db0eade89cdcc33b49090aba1655d54ddce3aaa2 Mon Sep 17 00:00:00 2001 From: spencer-lunarg Date: Tue, 30 Apr 2024 17:01:35 +0900 Subject: [PATCH] scripts: Fix logic for ignoring pipe state --- src/vulkan/vk_safe_struct_manual.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/vulkan/vk_safe_struct_manual.cpp b/src/vulkan/vk_safe_struct_manual.cpp index e585088..f7478a3 100644 --- a/src/vulkan/vk_safe_struct_manual.cpp +++ b/src/vulkan/vk_safe_struct_manual.cpp @@ -345,11 +345,15 @@ safe_VkGraphicsPipelineCreateInfo::safe_VkGraphicsPipelineCreateInfo(const VkGra else pInputAssemblyState = nullptr; bool has_tessellation_stage = false; - if (stageCount && pStages) - for (uint32_t i = 0; i < stageCount && !has_tessellation_stage; ++i) + bool has_fragment_stage = false; + if (stageCount && pStages) { + for (uint32_t i = 0; i < stageCount; ++i) { if (pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) has_tessellation_stage = true; + if (pStages[i].stage == VK_SHADER_STAGE_FRAGMENT_BIT) has_fragment_stage = true; + } + } if (in_struct->pTessellationState && has_tessellation_stage) pTessellationState = new safe_VkPipelineTessellationStateCreateInfo(in_struct->pTessellationState); else @@ -379,7 +383,8 @@ safe_VkGraphicsPipelineCreateInfo::safe_VkGraphicsPipelineCreateInfo(const VkGra pRasterizationState = new safe_VkPipelineRasterizationStateCreateInfo(in_struct->pRasterizationState); else pRasterizationState = nullptr; - if (in_struct->pMultisampleState && (renderPass != VK_NULL_HANDLE || has_rasterization || is_graphics_library)) + if (in_struct->pMultisampleState && + ((has_rasterization && (renderPass != VK_NULL_HANDLE || has_fragment_stage)) || is_graphics_library)) pMultisampleState = new safe_VkPipelineMultisampleStateCreateInfo(in_struct->pMultisampleState); else pMultisampleState = nullptr; // original pMultisampleState pointer ignored @@ -661,11 +666,15 @@ void safe_VkGraphicsPipelineCreateInfo::initialize(const VkGraphicsPipelineCreat else pInputAssemblyState = nullptr; bool has_tessellation_stage = false; - if (stageCount && pStages) - for (uint32_t i = 0; i < stageCount && !has_tessellation_stage; ++i) + bool has_fragment_stage = false; + if (stageCount && pStages) { + for (uint32_t i = 0; i < stageCount; ++i) { if (pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT || pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) has_tessellation_stage = true; + if (pStages[i].stage == VK_SHADER_STAGE_FRAGMENT_BIT) has_fragment_stage = true; + } + } if (in_struct->pTessellationState && has_tessellation_stage) pTessellationState = new safe_VkPipelineTessellationStateCreateInfo(in_struct->pTessellationState); else @@ -695,7 +704,8 @@ void safe_VkGraphicsPipelineCreateInfo::initialize(const VkGraphicsPipelineCreat pRasterizationState = new safe_VkPipelineRasterizationStateCreateInfo(in_struct->pRasterizationState); else pRasterizationState = nullptr; - if (in_struct->pMultisampleState && (renderPass != VK_NULL_HANDLE || has_rasterization || is_graphics_library)) + if (in_struct->pMultisampleState && + ((has_rasterization && (renderPass != VK_NULL_HANDLE || has_fragment_stage)) || is_graphics_library)) pMultisampleState = new safe_VkPipelineMultisampleStateCreateInfo(in_struct->pMultisampleState); else pMultisampleState = nullptr; // original pMultisampleState pointer ignored