MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / TEST_F

Function TEST_F

tests/unit/subgroups.cpp:21–262  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19class NegativeSubgroup : public VkLayerTest {};
20
21TEST_F(NegativeSubgroup, Properties) {
22 TEST_DESCRIPTION(
23 "Test shader validation support for subgroup VkPhysicalDeviceSubgroupProperties such as supportedStages, and "
24 "supportedOperations, quadOperationsInAllStages.");
25
26 SetTargetApiVersion(VK_API_VERSION_1_1);
27 AddRequiredFeature(vkt::Feature::vertexPipelineStoresAndAtomics);
28 RETURN_IF_SKIP(Init());
29
30 // Don't enable the extension on purpose
31 const bool extension_support_partitioned =
32 DeviceExtensionSupported(Gpu(), nullptr, VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME);
33 InitRenderTarget();
34
35 // Gather all aspects supported
36 VkPhysicalDeviceSubgroupProperties subgroup_prop = vku::InitStructHelper();
37 GetPhysicalDeviceProperties2(subgroup_prop);
38 VkSubgroupFeatureFlags subgroup_operations = subgroup_prop.supportedOperations;
39 const bool feature_support_basic = ((subgroup_operations & VK_SUBGROUP_FEATURE_BASIC_BIT) != 0);
40 const bool feature_support_vote = ((subgroup_operations & VK_SUBGROUP_FEATURE_VOTE_BIT) != 0);
41 const bool feature_support_arithmetic = ((subgroup_operations & VK_SUBGROUP_FEATURE_ARITHMETIC_BIT) != 0);
42 const bool feature_support_ballot = ((subgroup_operations & VK_SUBGROUP_FEATURE_BALLOT_BIT) != 0);
43 const bool feature_support_shuffle = ((subgroup_operations & VK_SUBGROUP_FEATURE_SHUFFLE_BIT) != 0);
44 const bool feature_support_relative = ((subgroup_operations & VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT) != 0);
45 const bool feature_support_culstered = ((subgroup_operations & VK_SUBGROUP_FEATURE_CLUSTERED_BIT) != 0);
46 const bool feature_support_quad = ((subgroup_operations & VK_SUBGROUP_FEATURE_QUAD_BIT) != 0);
47 const bool feature_support_partitioned = ((subgroup_operations & VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV) != 0);
48 const bool vertex_support = ((subgroup_prop.supportedStages & VK_SHADER_STAGE_VERTEX_BIT) != 0);
49 const bool vertex_quad_support = (subgroup_prop.quadOperationsInAllStages == VK_TRUE);
50
51 if (!feature_support_basic) {
52 GTEST_SKIP() << "VK_SUBGROUP_FEATURE_BASIC_BIT not supported, all test will have issues";
53 }
54
55 std::string vsSource;
56 std::vector<const char*> errors;
57 // There is no 'supportedOperations' check due to it would be redundant to the Capability check done first in VUID 01091 since
58 // each 'supportedOperations' flag is 1:1 map to a SPIR-V Capability
59 const char* operation_vuid = "VUID-VkShaderModuleCreateInfo-pCode-08740";
60 const char* stage_vuid = "VUID-RuntimeSpirv-None-06343";
61 const char* quad_vuid = "VUID-RuntimeSpirv-None-06342";
62
63 // Same pipeline creation for each subgroup test
64 auto subgroup_test = [this](std::string source, const std::vector<const char*>& errors) {
65 for (const auto& error : errors) m_errorMonitor->SetDesiredError(error);
66 VkShaderObj vs(*m_device, source.c_str(), VK_SHADER_STAGE_VERTEX_BIT, SPV_ENV_VULKAN_1_1);
67 if (!errors.empty()) {
68 m_errorMonitor->VerifyFound();
69 }
70 };
71
72 // Basic
73 {
74 vsSource = R"glsl(
75 #version 450
76 #extension GL_KHR_shader_subgroup_basic: enable
77 layout(set = 0, binding = 0) buffer StorageBuffer { float x; uint y; } ssbo;
78 void main(){

Callers

nothing calls this directly

Calls 13

VkShaderObjClass · 0.85
SetDesiredErrorMethod · 0.80
c_strMethod · 0.80
SetAllowedFailureMsgMethod · 0.80
CreateComputePipelineMethod · 0.80
emptyMethod · 0.45
VerifyFoundMethod · 0.45
clearMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected