anv: Add support for SPIR-V 1.3 subgroup operations

This requires us to bump the subgroup size to 32 for all shader stages
because Vulkan requires that to be a physical device query.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
Jason Ekstrand
2017-04-28 01:22:39 -07:00
parent 8b4a5e641b
commit 03c07ac548
4 changed files with 39 additions and 2 deletions

View File

@@ -113,6 +113,14 @@ struct brw_compiler {
bool supports_pull_constants;
};
/**
* We use a constant subgroup size of 32. It really only needs to be a
* maximum and, since we do SIMD32 for compute shaders in some cases, it
* needs to be at least 32. SIMD8 and SIMD16 shaders will still claim a
* subgroup size of 32 but will act as if 16 or 24 of those channels are
* disabled.
*/
#define BRW_SUBGROUP_SIZE 32
/**
* Program key structures.

View File

@@ -650,8 +650,7 @@ brw_preprocess_nir(const struct brw_compiler *compiler, nir_shader *nir)
OPT(nir_lower_system_values);
const nir_lower_subgroups_options subgroups_options = {
.subgroup_size = nir->info.stage == MESA_SHADER_COMPUTE ? 32 :
nir->info.stage == MESA_SHADER_FRAGMENT ? 16 : 8,
.subgroup_size = BRW_SUBGROUP_SIZE,
.ballot_bit_size = 32,
.lower_to_scalar = true,
.lower_subgroup_masks = true,