diff options
| author | Cort Stratton <cort@google.com> | 2017-04-27 16:26:47 +0200 |
|---|---|---|
| committer | Cort <cdwfs@users.noreply.github.com> | 2017-05-05 22:10:32 -0700 |
| commit | 848f10c4f9dcd5f492a1fac2b3b6c578c7c8641f (patch) | |
| tree | eef74c5d389ae57eb5c4b3d39a9f7de5fbbf22f9 /layers/core_validation.cpp | |
| parent | 814c8c8c7df490e55a91c597702bfca4447a4070 (diff) | |
| download | usermoji-848f10c4f9dcd5f492a1fac2b3b6c578c7c8641f.tar.xz | |
layers: check for both TE and TC, not just TC
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 383de011..31c76680 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -2860,15 +2860,15 @@ static bool verifyPipelineCreateState(layer_data *dev_data, std::vector<PIPELINE "Invalid Pipeline CreateInfo State: Vertex Shader required. %s", validation_error_map[VALIDATION_ERROR_00532]); } // Either both or neither TC/TE shaders should be defined - if ((pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) && - !(pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)) { + bool has_control = (pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) != 0; + bool has_eval = (pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) != 0; + if (has_control && !has_eval) { skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, reinterpret_cast<uint64_t &>(pPipeline->pipeline), __LINE__, VALIDATION_ERROR_00534, "DS", "Invalid Pipeline CreateInfo State: TE and TC shaders must be included or excluded as a pair. %s", validation_error_map[VALIDATION_ERROR_00534]); } - if (!(pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) && - (pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)) { + if (!has_control && has_eval) { skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, reinterpret_cast<uint64_t &>(pPipeline->pipeline), __LINE__, VALIDATION_ERROR_00535, "DS", "Invalid Pipeline CreateInfo State: TE and TC shaders must be included or excluded as a pair. %s", @@ -2883,7 +2883,7 @@ static bool verifyPipelineCreateState(layer_data *dev_data, std::vector<PIPELINE } // VK_PRIMITIVE_TOPOLOGY_PATCH_LIST primitive topology is only valid for tessellation pipelines. // Mismatching primitive topology and tessellation fails graphics pipeline creation. - if (pPipeline->active_shaders & (VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) && + if (has_control && has_eval && (!pPipeline->graphicsPipelineCI.pInputAssemblyState || pPipeline->graphicsPipelineCI.pInputAssemblyState->topology != VK_PRIMITIVE_TOPOLOGY_PATCH_LIST)) { skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, @@ -2895,7 +2895,7 @@ static bool verifyPipelineCreateState(layer_data *dev_data, std::vector<PIPELINE } if (pPipeline->graphicsPipelineCI.pInputAssemblyState && pPipeline->graphicsPipelineCI.pInputAssemblyState->topology == VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) { - if (~pPipeline->active_shaders & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) { + if (!has_control || !has_eval) { skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, reinterpret_cast<uint64_t &>(pPipeline->pipeline), __LINE__, VALIDATION_ERROR_02100, "DS", "Invalid Pipeline CreateInfo State: " |
