diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-01-21 15:06:10 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2018-03-07 21:18:35 +0100 |
commit | 8f9af587a2dd33580145779275203334d3acdc21 (patch) | |
tree | 44beb7d17db154c1f4a6c778effadad8f4b2bfa7 /src/amd/vulkan | |
parent | 89651fba9bf95c4b1397aaf6cc24c062f44a83f2 (diff) |
radv: Add minimal subgroup support.
Deliberately not implementing workgroup scopes as that is not needed
for core vulkan.
Reviewed-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/amd/vulkan')
-rw-r--r-- | src/amd/vulkan/radv_device.c | 9 | ||||
-rw-r--r-- | src/amd/vulkan/radv_shader.c | 10 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 0e584fc9dc9..00bb70612eb 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -866,6 +866,15 @@ void radv_GetPhysicalDeviceProperties2( properties->minImportedHostPointerAlignment = 4096; break; } + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES: { + VkPhysicalDeviceSubgroupProperties *properties = + (VkPhysicalDeviceSubgroupProperties*)ext; + properties->subgroupSize = 64; + properties->supportedStages = VK_SHADER_STAGE_ALL; + properties->supportedOperations = VK_SUBGROUP_FEATURE_BASIC_BIT; + properties->quadOperationsInAllStages = false; + break; + } default: break; } diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 8a241f8ec8e..1e20aa6f9ad 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -210,6 +210,7 @@ radv_shader_compile_to_nir(struct radv_device *device, .tessellation = true, .int64 = true, .multiview = true, + .subgroup_basic = true, .variable_pointers = true, }, }; @@ -266,6 +267,15 @@ radv_shader_compile_to_nir(struct radv_device *device, nir_lower_global_vars_to_local(nir); nir_remove_dead_variables(nir, nir_var_local); ac_lower_indirect_derefs(nir, device->physical_device->rad_info.chip_class); + nir_lower_subgroups(nir, &(struct nir_lower_subgroups_options) { + .subgroup_size = 64, + .ballot_bit_size = 64, + .lower_to_scalar = 1, + .lower_subgroup_masks = 1, + .lower_shuffle = 1, + .lower_quad = 1, + }); + radv_optimize_nir(nir); return nir; |