diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts index b134e5db633d..a8f423e1f729 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupBitwise.spec.ts @@ -547,12 +547,12 @@ g.test('fragment,all_active') .fn(async t => { const numInputs = t.params.size[0] * t.params.size[1]; - interface SubgroupProperties extends GPUAdapterInfo { - subgroupMinSize: number; + interface SubgroupLimits extends GPUSupportedLimits { + minSubgroupSize: number; } - const { subgroupMinSize } = t.device.adapterInfo as SubgroupProperties; + const { minSubgroupSize } = t.device.limits as SubgroupLimits; const innerTexels = (t.params.size[0] - 1) * (t.params.size[1] - 1); - t.skipIf(innerTexels < subgroupMinSize, 'Too few texels to be reliable'); + t.skipIf(innerTexels < minSubgroupSize, 'Too few texels to be reliable'); const inputData = generateInputData(t.params.case, numInputs, identity(t.params.op)); diff --git a/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts b/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts index 50dac8c4d894..5c9650778a68 100644 --- a/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts +++ b/src/webgpu/shader/execution/expression/call/builtin/subgroupBroadcast.spec.ts @@ -444,12 +444,12 @@ g.test('compute,split') const testcase = kPredicateCases[t.params.predicate]; const wgThreads = t.params.wgSize[0] * t.params.wgSize[1] * t.params.wgSize[2]; - interface SubgroupProperties extends GPUAdapterInfo { - subgroupMinSize: number; - subgroupMaxSize: number; + interface SubgroupLimits extends GPUSupportedLimits { + minSubgroupSize: number; + maxSubgroupSize: number; } - const { subgroupMinSize, subgroupMaxSize } = t.device.adapterInfo as SubgroupProperties; - for (let size = subgroupMinSize; size <= subgroupMaxSize; size *= 2) { + const { minSubgroupSize, maxSubgroupSize } = t.device.limits as SubgroupLimits; + for (let size = minSubgroupSize; size <= maxSubgroupSize; size *= 2) { t.skipIf(!testcase.filter(t.params.id, size), 'Skipping potential undefined behavior'); } @@ -669,11 +669,11 @@ g.test('fragment') }) .fn(async t => { const innerTexels = (t.params.size[0] - 1) * (t.params.size[1] - 1); - interface SubgroupProperties extends GPUAdapterInfo { - subgroupMaxSize: number; + interface SubgroupLimits extends GPUSupportedLimits { + maxSubgroupSize: number; } - const { subgroupMaxSize } = t.device.adapterInfo as SubgroupProperties; - t.skipIf(innerTexels < subgroupMaxSize, 'Too few texels to be reliable'); + const { maxSubgroupSize } = t.device.limits as SubgroupLimits; + t.skipIf(innerTexels < maxSubgroupSize, 'Too few texels to be reliable'); const broadcast = t.params.id === 0 diff --git a/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts b/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts index f264052f8cb5..a08d6eb39533 100644 --- a/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts +++ b/src/webgpu/shader/execution/shader_io/compute_builtins.spec.ts @@ -398,11 +398,11 @@ g.test('subgroup_size') t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); }) .fn(async t => { - interface SubgroupProperties extends GPUAdapterInfo { - subgroupMinSize: number; - subgroupMaxSize: number; + interface SubgroupLimits extends GPUSupportedLimits { + minSubgroupSize: number; + maxSubgroupSize: number; } - const { subgroupMinSize, subgroupMaxSize } = t.device.adapterInfo as SubgroupProperties; + const { minSubgroupSize, maxSubgroupSize } = t.device.limits as SubgroupLimits; const wgx = t.params.sizes[0]; const wgy = t.params.sizes[1]; @@ -518,8 +518,8 @@ fn main(@builtin(subgroup_size) size : u32, checkSubgroupSizeConsistency( sizesData, compareData, - subgroupMinSize, - subgroupMaxSize, + minSubgroupSize, + maxSubgroupSize, wgThreads ) ); diff --git a/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts b/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts index 5d10a3dafe2b..bb7f3b113e26 100644 --- a/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts +++ b/src/webgpu/shader/execution/shader_io/fragment_builtins.spec.ts @@ -1655,16 +1655,16 @@ g.test('subgroup_size') t.selectDeviceOrSkipTestCase('subgroups' as GPUFeatureName); }) .fn(async t => { - interface SubgroupProperties extends GPUAdapterInfo { - subgroupMinSize: number; - subgroupMaxSize: number; + interface SubgroupLimits extends GPUSupportedLimits { + minSubgroupSize: number; + maxSubgroupSize: number; } - const { subgroupMinSize, subgroupMaxSize } = t.device.adapterInfo as SubgroupProperties; + const { minSubgroupSize, maxSubgroupSize } = t.device.limits as SubgroupLimits; const fsShader = ` enable subgroups; -const subgroupMaxSize = ${kMaximiumSubgroupSize}u; +const maxSubgroupSize = ${kMaximiumSubgroupSize}u; const noError = ${kSubgroupShaderNoError}u; const width = ${t.params.size[0]}; @@ -1686,7 +1686,7 @@ fn fsMain( var subgroupSizeBallotedInvocations: u32 = 0u; var ballotedSubgroupSize: u32 = 0u; - for (var i: u32 = 0; i <= subgroupMaxSize; i++) { + for (var i: u32 = 0; i <= maxSubgroupSize; i++) { let ballotSubgroupSizeEqualI = countOneBits(subgroupBallot(sg_size == i)); let countSubgroupSizeEqualI = ballotSubgroupSizeEqualI.x + ballotSubgroupSizeEqualI.y + ballotSubgroupSizeEqualI.z + ballotSubgroupSizeEqualI.w; subgroupSizeBallotedInvocations += countSubgroupSizeEqualI; @@ -1716,8 +1716,8 @@ fn fsMain( return checkSubgroupSizeConsistency( data, t.params.format, - subgroupMinSize, - subgroupMaxSize, + minSubgroupSize, + maxSubgroupSize, t.params.size[0], t.params.size[1] ); @@ -1816,7 +1816,7 @@ enable subgroups; const width = ${t.params.size[0]}; const height = ${t.params.size[1]}; -const subgroupMaxSize = ${kMaximiumSubgroupSize}u; +const maxSubgroupSize = ${kMaximiumSubgroupSize}u; // A non-zero magic number indicating no expectation error, in order to prevent the // false no-error result from zero-initialization. const noError = ${kSubgroupShaderNoError}u; @@ -1830,8 +1830,8 @@ fn fsMain( var error: u32 = noError; - // Validate that reported subgroup size is no larger than subgroupMaxSize - if (sg_size > subgroupMaxSize) { + // Validate that reported subgroup size is no larger than maxSubgroupSize + if (sg_size > maxSubgroupSize) { error++; } @@ -1843,7 +1843,7 @@ fn fsMain( // Validate that each subgroup id is assigned to at most one active invocation // in the subgroup var countAssignedId: u32 = 0u; - for (var i: u32 = 0; i < subgroupMaxSize; i++) { + for (var i: u32 = 0; i < maxSubgroupSize; i++) { let ballotIdEqualsI = countOneBits(subgroupBallot(id == i)); let countInvocationIdEqualsI = ballotIdEqualsI.x + ballotIdEqualsI.y + ballotIdEqualsI.z + ballotIdEqualsI.w; // Validate an id assigned at most once