From 4771b415dcd07959c3d27366ae7b72fb067bb8f8 Mon Sep 17 00:00:00 2001 From: Mike Schuchardt Date: Wed, 26 Apr 2017 15:25:23 -0600 Subject: layers: Move patchControlPoints validation Move pTessellationState->patchControlPoints checks to parameter validation where they will only be executed if the pipeline contains tessellation stages. Change-Id: I271f915625995f4a54045d0abe63ce27b9e023f9 --- layers/core_validation.cpp | 15 --------------- layers/parameter_validation.cpp | 13 +++++++++++++ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index d1afb90d..383de011 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -2905,21 +2905,6 @@ static bool verifyPipelineCreateState(layer_data *dev_data, std::vectorgraphicsPipelineCI.pTessellationState && - ((pPipeline->graphicsPipelineCI.pTessellationState->patchControlPoints == 0) || - (pPipeline->graphicsPipelineCI.pTessellationState->patchControlPoints > - dev_data->phys_dev_properties.properties.limits.maxTessellationPatchSize))) { - skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, - reinterpret_cast(pPipeline->pipeline), __LINE__, VALIDATION_ERROR_01426, "DS", - "Invalid Pipeline CreateInfo State: " - "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST primitive " - "topology used with patchControlPoints value %u." - " patchControlPoints should be >0 and <=%u. %s", - pPipeline->graphicsPipelineCI.pTessellationState->patchControlPoints, - dev_data->phys_dev_properties.properties.limits.maxTessellationPatchSize, - validation_error_map[VALIDATION_ERROR_01426]); - } - // If a rasterization state is provided... if (pPipeline->graphicsPipelineCI.pRasterizationState) { // Make sure that the line width conforms to the HW. diff --git a/layers/parameter_validation.cpp b/layers/parameter_validation.cpp index d9cd7f7d..301fb404 100644 --- a/layers/parameter_validation.cpp +++ b/layers/parameter_validation.cpp @@ -2961,6 +2961,19 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(VkDevice device, VkPipeli "be VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO. %s", i, validation_error_map[VALIDATION_ERROR_00538]); } + + if (pCreateInfos[i].pTessellationState->patchControlPoints == 0 || + pCreateInfos[i].pTessellationState->patchControlPoints > + device_data->device_limits.maxTessellationPatchSize) { + skip |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, + __LINE__, VALIDATION_ERROR_01426, LayerName, + "vkCreateGraphicsPipelines: invalid parameter " + "pCreateInfos[%d].pTessellationState->patchControlPoints value %u. patchControlPoints " + "should be >0 and <=%u. %s", + i, pCreateInfos[i].pTessellationState->patchControlPoints, + device_data->device_limits.maxTessellationPatchSize, + validation_error_map[VALIDATION_ERROR_01426]); + } } } } -- cgit v1.2.3