graphics: continue compute on native subgroup size

This commit is contained in:
nmzik
2026-08-19 20:03:11 +02:00
parent a42e3bb09e
commit 77db9164b8
2 changed files with 7 additions and 10 deletions
@@ -52,10 +52,7 @@ ShaderSubgroupConfiguration ConfigureShaderSubgroup(const ShaderSubgroupCapabili
guest_wave_size <= capabilities.max_subgroup_size) { guest_wave_size <= capabilities.max_subgroup_size) {
return {ShaderSubgroupMode::Controlled, guest_wave_size}; return {ShaderSubgroupMode::Controlled, guest_wave_size};
} }
if (!program.spirv_requirements->requires_exact_subgroup) {
return {ShaderSubgroupMode::FlattenedMasks, 0}; return {ShaderSubgroupMode::FlattenedMasks, 0};
}
return {};
} }
} // namespace Libs::Graphics } // namespace Libs::Graphics
+6 -6
View File
@@ -1146,8 +1146,8 @@ void TestNativeSubgroupPolicy() {
Check(ConfigureShaderSubgroup(ShaderSubgroupCapabilities{context}, Check(ConfigureShaderSubgroup(ShaderSubgroupCapabilities{context},
vk::ShaderStageFlagBits::eCompute, vk::ShaderStageFlagBits::eCompute,
cross_lane_compute) cross_lane_compute)
.mode == ShaderSubgroupMode::Unsupported, .mode == ShaderSubgroupMode::FlattenedMasks,
"cross-lane compute mismatch bypassed the exact subgroup requirement"); "split wave64 compute did not use native subgroup operations");
ShaderRecompiler::IR::Program zero_exec = safe; ShaderRecompiler::IR::Program zero_exec = safe;
zero_exec.lane_mask_mode = ShaderLaneMaskMode::NativeWave; zero_exec.lane_mask_mode = ShaderLaneMaskMode::NativeWave;
@@ -1180,8 +1180,8 @@ void TestNativeSubgroupPolicy() {
SetTypedValues(ds_partial, ShaderRecompiler::IR::ValueOpcode::DataAppend); SetTypedValues(ds_partial, ShaderRecompiler::IR::ValueOpcode::DataAppend);
Check(ConfigureShaderSubgroup(ShaderSubgroupCapabilities{context}, Check(ConfigureShaderSubgroup(ShaderSubgroupCapabilities{context},
vk::ShaderStageFlagBits::eCompute, ds_partial) vk::ShaderStageFlagBits::eCompute, ds_partial)
.mode == ShaderSubgroupMode::Unsupported, .mode == ShaderSubgroupMode::FlattenedMasks,
"partial wave64 DS append bypassed the exact subgroup requirement"); "split wave64 DS append did not use native subgroup operations");
context.max_subgroup_size = 64; context.max_subgroup_size = 64;
const auto controlled = ConfigureShaderSubgroup( const auto controlled = ConfigureShaderSubgroup(
ShaderSubgroupCapabilities{context}, vk::ShaderStageFlagBits::eCompute, ShaderSubgroupCapabilities{context}, vk::ShaderStageFlagBits::eCompute,
@@ -1201,8 +1201,8 @@ void TestNativeSubgroupPolicy() {
Check(ConfigureShaderSubgroup(ShaderSubgroupCapabilities{context}, Check(ConfigureShaderSubgroup(ShaderSubgroupCapabilities{context},
vk::ShaderStageFlagBits::eCompute, vk::ShaderStageFlagBits::eCompute,
cross_lane_compute) cross_lane_compute)
.mode == ShaderSubgroupMode::Unsupported, .mode == ShaderSubgroupMode::FlattenedMasks,
"inverse cross-lane compute mismatch was accepted"); "inverse compute mismatch did not use the native subgroup");
} }
std::array<uint32_t, 64> std::array<uint32_t, 64>