radv: ignore pTessellationState if the pipeline doesn't use tess
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 19 Dec 2019 13:18:24 +0000 (14:18 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Fri, 20 Dec 2019 07:20:52 +0000 (08:20 +0100)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3167>

src/amd/vulkan/radv_pipeline.c

index c1058551e64d065ba3b998948dc3a26d8491cc4a..a81e6831c969098e668bbe43958edcaf5345cab1 100644 (file)
@@ -99,6 +99,18 @@ radv_pipeline_get_multisample_state(const VkGraphicsPipelineCreateInfo *pCreateI
        return NULL;
 }
 
+static const VkPipelineTessellationStateCreateInfo *
+radv_pipeline_get_tessellation_state(const VkGraphicsPipelineCreateInfo *pCreateInfo)
+{
+       for (uint32_t i = 0; i < pCreateInfo->stageCount; i++) {
+               if (pCreateInfo->pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT ||
+                   pCreateInfo->pStages[i].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) {
+                       return pCreateInfo->pTessellationState;
+               }
+       }
+       return NULL;
+}
+
 bool radv_pipeline_has_ngg(const struct radv_pipeline *pipeline)
 {
        struct radv_shader_variant *variant = NULL;
@@ -2273,8 +2285,10 @@ radv_generate_graphics_pipeline_key(struct radv_pipeline *pipeline,
                }
        }
 
-       if (pCreateInfo->pTessellationState)
-               key.tess_input_vertices = pCreateInfo->pTessellationState->patchControlPoints;
+       const VkPipelineTessellationStateCreateInfo *tess =
+               radv_pipeline_get_tessellation_state(pCreateInfo);
+       if (tess)
+               key.tess_input_vertices = tess->patchControlPoints;
 
        const VkPipelineMultisampleStateCreateInfo *vkms =
                radv_pipeline_get_multisample_state(pCreateInfo);