lavapipe: ignore tess pipeline info if no tess shaders in pipeline

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10625>
This commit is contained in:
Mike Blumenkrantz
2021-04-24 13:17:34 -04:00
committed by Marge Bot
parent 4d60a646b0
commit 11261d2189

View File

@@ -238,12 +238,14 @@ deep_copy_graphics_create_info(void *mem_ctx,
dst->basePipelineIndex = src->basePipelineIndex; dst->basePipelineIndex = src->basePipelineIndex;
/* pStages */ /* pStages */
VkShaderStageFlags stages_present = 0;
dst->stageCount = src->stageCount; dst->stageCount = src->stageCount;
stages = ralloc_array(mem_ctx, VkPipelineShaderStageCreateInfo, dst->stageCount); stages = ralloc_array(mem_ctx, VkPipelineShaderStageCreateInfo, dst->stageCount);
for (i = 0 ; i < dst->stageCount; i++) { for (i = 0 ; i < dst->stageCount; i++) {
result = deep_copy_shader_stage(mem_ctx, &stages[i], &src->pStages[i]); result = deep_copy_shader_stage(mem_ctx, &stages[i], &src->pStages[i]);
if (result != VK_SUCCESS) if (result != VK_SUCCESS)
return result; return result;
stages_present |= src->pStages[i].stage;
} }
dst->pStages = stages; dst->pStages = stages;
@@ -262,7 +264,9 @@ deep_copy_graphics_create_info(void *mem_ctx,
1); 1);
/* pTessellationState */ /* pTessellationState */
if (src->pTessellationState) { if (src->pTessellationState &&
(stages_present & (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)) ==
(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)) {
LVP_PIPELINE_DUP(dst->pTessellationState, LVP_PIPELINE_DUP(dst->pTessellationState,
src->pTessellationState, src->pTessellationState,
VkPipelineTessellationStateCreateInfo, VkPipelineTessellationStateCreateInfo,