Skip to content

Commit 67e411f

Browse files
layers: New Clip/Cull VUID churn
1 parent 27c7f10 commit 67e411f

5 files changed

Lines changed: 24 additions & 29 deletions

File tree

layers/core_checks/cc_shader_interface.cpp

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -368,8 +368,6 @@ bool CoreChecks::ValidateBuiltInLimits(const spirv::Module& module_state, const
368368
uint32_t clip_distance_total = 0;
369369
uint32_t cull_distance_total = 0;
370370

371-
// ... so apperently Vulkan 1.0 (and like 2% of random devices don't support clip/cull somehow)
372-
// Not sure if we should really be validating these yet
373371
// https://gitlab.khronos.org/vulkan/vulkan/-/work_items/4965
374372
const bool skip_clip_cull = phys_dev_props.limits.maxClipDistances == 0 || phys_dev_props.limits.maxCullDistances == 0 ||
375373
phys_dev_props.limits.maxCombinedClipAndCullDistances == 0;
@@ -404,9 +402,7 @@ bool CoreChecks::ValidateBuiltInLimits(const spirv::Module& module_state, const
404402
const uint32_t array_size = module_state.GetFlattenArraySize(*variable->type_struct_info->members[i].insn);
405403
clip_distance_total += array_size;
406404
if (array_size > phys_dev_props.limits.maxClipDistances) {
407-
const char* vuid = pipeline ? "VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708"
408-
: "VUID-VkShaderCreateInfoEXT-pCode-08448";
409-
skip |= LogError(vuid, module_state.handle(), loc,
405+
skip |= LogError("VUID-RuntimeSpirv-maxClipDistances-00708", module_state.handle(), loc,
410406
"shader %s ClipDistance BuiltIn array size is %" PRIu32
411407
" which exceeds maxClipDistances of %" PRIu32 ".",
412408
entrypoint.Describe().c_str(), array_size, phys_dev_props.limits.maxClipDistances);
@@ -415,9 +411,7 @@ bool CoreChecks::ValidateBuiltInLimits(const spirv::Module& module_state, const
415411
const uint32_t array_size = module_state.GetFlattenArraySize(*variable->type_struct_info->members[i].insn);
416412
cull_distance_total += array_size;
417413
if (array_size > phys_dev_props.limits.maxCullDistances) {
418-
const char* vuid = pipeline ? "VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709"
419-
: "VUID-VkShaderCreateInfoEXT-pCode-08449";
420-
skip |= LogError(vuid, module_state.handle(), loc,
414+
skip |= LogError("VUID-RuntimeSpirv-maxCullDistances-00709", module_state.handle(), loc,
421415
"shader %s CullDistance BuiltIn array size is %" PRIu32
422416
" which exceeds maxCullDistances of %" PRIu32 ".",
423417
entrypoint.Describe().c_str(), array_size, phys_dev_props.limits.maxCullDistances);
@@ -427,19 +421,15 @@ bool CoreChecks::ValidateBuiltInLimits(const spirv::Module& module_state, const
427421
} else if (variable->decorations.built_in == spv::BuiltInClipDistance) {
428422
clip_distance_total += variable->array_size;
429423
if (variable->array_size > phys_dev_props.limits.maxClipDistances) {
430-
const char* vuid = pipeline ? "VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708"
431-
: "VUID-VkShaderCreateInfoEXT-pCode-08448";
432-
skip |= LogError(vuid, module_state.handle(), loc,
424+
skip |= LogError("VUID-RuntimeSpirv-maxClipDistances-00708", module_state.handle(), loc,
433425
"shader %s ClipDistance BuiltIn array size is %" PRIu32
434426
" which exceeds maxClipDistances of %" PRIu32 ".",
435427
entrypoint.Describe().c_str(), variable->array_size, phys_dev_props.limits.maxClipDistances);
436428
}
437429
} else if (variable->decorations.built_in == spv::BuiltInCullDistance) {
438430
cull_distance_total += variable->array_size;
439431
if (variable->array_size > phys_dev_props.limits.maxCullDistances) {
440-
const char* vuid = pipeline ? "VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709"
441-
: "VUID-VkShaderCreateInfoEXT-pCode-08449";
442-
skip |= LogError(vuid, module_state.handle(), loc,
432+
skip |= LogError("VUID-RuntimeSpirv-maxCullDistances-00709", module_state.handle(), loc,
443433
"shader %s CullDistance BuiltIn array size is %" PRIu32
444434
" which exceeds maxCullDistances of %" PRIu32 ".",
445435
entrypoint.Describe().c_str(), variable->array_size, phys_dev_props.limits.maxCullDistances);
@@ -448,9 +438,7 @@ bool CoreChecks::ValidateBuiltInLimits(const spirv::Module& module_state, const
448438
}
449439

450440
if (!skip_clip_cull && (clip_distance_total + cull_distance_total) > phys_dev_props.limits.maxCombinedClipAndCullDistances) {
451-
const char* vuid = pipeline ? "VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710"
452-
: "VUID-VkShaderCreateInfoEXT-pCode-08450";
453-
skip |= LogError(vuid, module_state.handle(), loc,
441+
skip |= LogError("VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710", module_state.handle(), loc,
454442
"shader %s has a ClipDistance BuiltIn array size of %" PRIu32
455443
" and a CullDistance BuiltIn array size of %" PRIu32 " which sum to %" PRIu32
456444
" and exceed maxCombinedClipAndCullDistances of %" PRIu32 ".",

layers/error_message/unimplementable_validation.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,15 @@ const char* not_going_to_do[] = {
828828
// This falls under the failure of the sparse memory spec/testing
829829
// so going to skip until someone complains loudly
830830
"VUID-vkCmdDraw-None-08119",
831+
832+
// https://gitlab.khronos.org/vulkan/vulkan/-/work_items/4965
833+
// Apparently some ARM devices support no clip/cull and guarded by the
834+
// shaderClipDistance/shaderCullDistance features such that these are not possible to even hit
835+
// This whole thing is an issue because glslang adds the Clip/Cull to the gl_vertex output struct
836+
// but only if you use it does it use the OpCapabilty
837+
// ... so these are just here because of the decision of glslang years ago
838+
"VUID-RuntimeSpirv-maxClipDistances-08448",
839+
"VUID-RuntimeSpirv-maxCullDistances-08449",
831840
};
832841

833842
// VUs from deprecated extensions that would require complex codegen to get working

scripts/vk_validation_stats.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,6 @@ def __init__(self, val_json, val_source, val_tests, spirv_val):
325325
"5724" : ["03511", "03512", "03513", "03514", "03638", "03639", "03640", "03641", "03681", "03682", "03684", "03685", "03686", "03688", "03689", "03690", "03692", "03693", "03694", "04029", "04035", "04041", "04735", "04736"],
326326
"5749" : ["06289", "06290", "06291", "06292"],
327327
"6656" : ["08756", "08757"],
328-
"6801" : ["00708", "00709", "00710", "08448", "08449", "08450"],
329328
"7141" : ["09373", "09374"],
330329
"7481" : ["03561"],
331330
"8095" : ["10795", "10796", "10797"],

tests/unit/shader_limits.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ TEST_F(NegativeShaderLimits, MaxClipDistances) {
186186
VkShaderObj fs(*m_device, source.str().c_str(), VK_SHADER_STAGE_FRAGMENT_BIT, SPV_ENV_VULKAN_1_0, SPV_SOURCE_ASM);
187187

188188
// hit both limits
189-
m_errorMonitor->SetAllowedFailureMsg("VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710");
189+
m_errorMonitor->SetAllowedFailureMsg("VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710");
190190
const auto set_fs = [&](CreatePipelineHelper& helper) {
191191
helper.shader_stages_ = {helper.vs_->GetStageCreateInfo(), fs.GetStageCreateInfo()};
192192
};
193-
CreatePipelineHelper::OneshotTest(*this, set_fs, kErrorBit, "VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708");
193+
CreatePipelineHelper::OneshotTest(*this, set_fs, kErrorBit, "VUID-RuntimeSpirv-maxClipDistances-00708");
194194
}
195195

196196
TEST_F(NegativeShaderLimits, MaxCullDistances) {
@@ -246,11 +246,11 @@ TEST_F(NegativeShaderLimits, MaxCullDistances) {
246246
VkShaderObj vs(*m_device, source.str().c_str(), VK_SHADER_STAGE_VERTEX_BIT, SPV_ENV_VULKAN_1_0, SPV_SOURCE_ASM);
247247

248248
// hit both limits
249-
m_errorMonitor->SetAllowedFailureMsg("VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710");
249+
m_errorMonitor->SetAllowedFailureMsg("VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710");
250250
const auto set_vs = [&](CreatePipelineHelper& helper) {
251251
helper.shader_stages_ = {vs.GetStageCreateInfo(), helper.fs_->GetStageCreateInfo()};
252252
};
253-
CreatePipelineHelper::OneshotTest(*this, set_vs, kErrorBit, "VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709");
253+
CreatePipelineHelper::OneshotTest(*this, set_vs, kErrorBit, "VUID-RuntimeSpirv-maxCullDistances-00709");
254254
}
255255

256256
TEST_F(NegativeShaderLimits, MaxCombinedClipAndCullDistances) {
@@ -317,8 +317,7 @@ TEST_F(NegativeShaderLimits, MaxCombinedClipAndCullDistances) {
317317
const auto set_vs = [&](CreatePipelineHelper& helper) {
318318
helper.shader_stages_ = {vs.GetStageCreateInfo(), helper.fs_->GetStageCreateInfo()};
319319
};
320-
CreatePipelineHelper::OneshotTest(*this, set_vs, kErrorBit,
321-
"VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710");
320+
CreatePipelineHelper::OneshotTest(*this, set_vs, kErrorBit, "VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710");
322321
}
323322

324323
TEST_F(NegativeShaderLimits, MinAndMaxTexelGatherOffset) {

tests/unit/shader_object_ext.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4736,8 +4736,8 @@ TEST_F(NegativeShaderObjectEXT, MaxClipDistances) {
47364736
VkShaderCreateInfoEXT create_info = ShaderCreateInfoEXT(spv, VK_SHADER_STAGE_FRAGMENT_BIT);
47374737

47384738
VkShaderEXT shader;
4739-
m_errorMonitor->SetAllowedFailureMsg("VUID-VkShaderCreateInfoEXT-pCode-08450"); // hit both limits
4740-
m_errorMonitor->SetDesiredError("VUID-VkShaderCreateInfoEXT-pCode-08448");
4739+
m_errorMonitor->SetAllowedFailureMsg("VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710"); // hit both limits
4740+
m_errorMonitor->SetDesiredError("VUID-RuntimeSpirv-maxClipDistances-00708");
47414741
vk::CreateShadersEXT(*m_device, 1u, &create_info, nullptr, &shader);
47424742
m_errorMonitor->VerifyFound();
47434743
}
@@ -4797,8 +4797,8 @@ TEST_F(NegativeShaderObjectEXT, MaxCullDistances) {
47974797
VkShaderCreateInfoEXT create_info = ShaderCreateInfoEXT(spv, VK_SHADER_STAGE_VERTEX_BIT);
47984798

47994799
VkShaderEXT shader;
4800-
m_errorMonitor->SetAllowedFailureMsg("VUID-VkShaderCreateInfoEXT-pCode-08450"); // hit both limits
4801-
m_errorMonitor->SetDesiredError("VUID-VkShaderCreateInfoEXT-pCode-08449");
4800+
m_errorMonitor->SetAllowedFailureMsg("VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710"); // hit both limits
4801+
m_errorMonitor->SetDesiredError("VUID-RuntimeSpirv-maxCullDistances-00709");
48024802
vk::CreateShadersEXT(*m_device, 1u, &create_info, nullptr, &shader);
48034803
m_errorMonitor->VerifyFound();
48044804
}
@@ -4867,7 +4867,7 @@ TEST_F(NegativeShaderObjectEXT, MaxCombinedClipAndCullDistances) {
48674867
VkShaderCreateInfoEXT create_info = ShaderCreateInfoEXT(spv, VK_SHADER_STAGE_VERTEX_BIT);
48684868

48694869
VkShaderEXT shader;
4870-
m_errorMonitor->SetDesiredError("VUID-VkShaderCreateInfoEXT-pCode-08450");
4870+
m_errorMonitor->SetDesiredError("VUID-RuntimeSpirv-maxCombinedClipAndCullDistances-00710");
48714871
vk::CreateShadersEXT(*m_device, 1u, &create_info, nullptr, &shader);
48724872
m_errorMonitor->VerifyFound();
48734873
}

0 commit comments

Comments
 (0)