From e059c074fedba82aa52bd8741712ac5da37be65f Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Fri, 12 Jun 2015 11:16:41 +1200 Subject: shader_checker: Check for duplicate VI binding descriptions. Signed-off-by: Chris Forbes Reviewed-by: Tobin Ehlis --- layers/shader_checker.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'layers/shader_checker.cpp') diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp index fef4512f..a576314a 100644 --- a/layers/shader_checker.cpp +++ b/layers/shader_checker.cpp @@ -643,6 +643,33 @@ get_fundamental_type(shader_source const *src, unsigned type) } +static bool +validate_vi_consistency(VkPipelineVertexInputCreateInfo const *vi) +{ + /* walk the binding descriptions, which describe the step rate and stride of each vertex buffer. + * each binding should be specified only once. + */ + std::unordered_map bindings; + char str[1024]; + bool pass = true; + + for (unsigned i = 0; i < vi->bindingCount; i++) { + auto desc = &vi->pVertexBindingDescriptions[i]; + auto & binding = bindings[desc->binding]; + if (binding) { + sprintf(str, "Duplicate vertex input binding descriptions for binding %d", desc->binding); + layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, SHADER_CHECKER_INCONSISTENT_VI, "SC", str); + pass = false; + } + else { + binding = desc; + } + } + + return pass; +} + + static bool validate_vi_against_vs_inputs(VkPipelineVertexInputCreateInfo const *vi, shader_source const *vs) { @@ -834,6 +861,10 @@ validate_graphics_pipeline(VkGraphicsPipelineCreateInfo const *pCreateInfo) } } + if (vi) { + pass = validate_vi_consistency(vi) && pass; + } + if (shaders[VK_SHADER_STAGE_VERTEX] && shaders[VK_SHADER_STAGE_VERTEX]->is_spirv) { pass = validate_vi_against_vs_inputs(vi, shaders[VK_SHADER_STAGE_VERTEX]) && pass; } -- cgit v1.2.3