diff --git a/src/webgpu/listing_meta.json b/src/webgpu/listing_meta.json index 5e4415b59506..acbdadfb759a 100644 --- a/src/webgpu/listing_meta.json +++ b/src/webgpu/listing_meta.json @@ -1965,6 +1965,11 @@ "webgpu:shader,execution,statement,increment_decrement:vec4_element_decrement:*": { "subcaseMS": 5.300 }, "webgpu:shader,execution,statement,increment_decrement:vec4_element_increment:*": { "subcaseMS": 6.300 }, "webgpu:shader,execution,statement,phony:executes:*": { "subcaseMS": 129.949 }, + "webgpu:shader,execution,statement,swizzle_assignment:swizzle_assignment_chained:*": { "subcaseMS": 0.112 }, + "webgpu:shader,execution,statement,swizzle_assignment:swizzle_assignment_local_var:*": { "subcaseMS": 286.932 }, + "webgpu:shader,execution,statement,swizzle_assignment:swizzle_assignment_other_vars:*": { "subcaseMS": 0.140 }, + "webgpu:shader,execution,statement,swizzle_assignment:swizzle_assignment_pointer:*": { "subcaseMS": 0.109 }, + "webgpu:shader,execution,statement,swizzle_assignment:swizzle_compound_assignment:*": { "subcaseMS": 0.091 }, "webgpu:shader,execution,value_init:array,nested:*": { "subcaseMS": 3004.523 }, "webgpu:shader,execution,value_init:array:*": { "subcaseMS": 3831.989 }, "webgpu:shader,execution,value_init:mat:*": { "subcaseMS": 703.612 }, @@ -2877,6 +2882,12 @@ "webgpu:shader,validation,statement,switch:condition_type:*": { "subcaseMS": 5.402 }, "webgpu:shader,validation,statement,switch:condition_type_match_case_type:*": { "subcaseMS": 3.750 }, "webgpu:shader,validation,statement,switch:parse:*": { "subcaseMS": 16.068 }, + "webgpu:shader,validation,statement,swizzle_assignment:invalid_component_mismatch:*": { "subcaseMS": 1.246 }, + "webgpu:shader,validation,statement,swizzle_assignment:invalid_component_oob:*": { "subcaseMS": 1.297 }, + "webgpu:shader,validation,statement,swizzle_assignment:invalid_duplicate_components:*": { "subcaseMS": 1.005 }, + "webgpu:shader,validation,statement,swizzle_assignment:invalid_lhs_not_reference:*": { "subcaseMS": 3.222 }, + "webgpu:shader,validation,statement,swizzle_assignment:invalid_type_mismatch:*": { "subcaseMS": 1.086 }, + "webgpu:shader,validation,statement,swizzle_assignment:valid:*": { "subcaseMS": 138.201 }, "webgpu:shader,validation,statement,while:condition_type:*": { "subcaseMS": 5.328 }, "webgpu:shader,validation,statement,while:parse:*": { "subcaseMS": 8.641 }, "webgpu:shader,validation,types,alias:any_type:*": { "subcaseMS": 42.329 }, diff --git a/src/webgpu/shader/execution/statement/swizzle_assignment.spec.ts b/src/webgpu/shader/execution/statement/swizzle_assignment.spec.ts index fc3145a1de2f..aed28c81cf53 100644 --- a/src/webgpu/shader/execution/statement/swizzle_assignment.spec.ts +++ b/src/webgpu/shader/execution/statement/swizzle_assignment.spec.ts @@ -3,6 +3,7 @@ Swizzle assignment execution. `; import { makeTestGroup } from '../../../../common/framework/test_group.js'; +import { keysOf } from '../../../../common/util/data_tables.js'; import { TypedArrayBufferView } from '../../../../common/util/util.js'; import { Float16Array } from '../../../../external/petamoriken/float16/float16.js'; import { AllFeaturesMaxLimitsGPUTest, GPUTest } from '../../../gpu_test.js'; @@ -119,10 +120,10 @@ interface SwizzleAssignmentCase { expected: readonly number[]; } -const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ +const kSwizzleAssignmentCases: Record = { // v = vec4u(1, 2, 3, 4) // v.w = 5; - { + vec4u_w_literal: { elemType: 'u32', vecSize: 4, initial: [1, 2, 3, 4], @@ -132,7 +133,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec4u(1, 2, 3, 5) // v.xy = vec2u(6, 7); - { + vec4u_xy_vec2u: { elemType: 'u32', vecSize: 4, initial: [1, 2, 3, 5], @@ -142,7 +143,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec4u(6, 7, 3, 5) // v.zx = vec2u(8, 9); - { + vec4u_zx_vec2u: { elemType: 'u32', vecSize: 4, initial: [6, 7, 3, 5], @@ -152,7 +153,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec4u(1, 1, 1, 1) // v.xyzw = vec4u(10, 11, 12, 13); - { + vec4u_xyzw_vec4u: { elemType: 'u32', vecSize: 4, initial: [1, 1, 1, 1], @@ -162,7 +163,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec4u(10, 11, 12, 13) // v.xy = vec2(v.y, v.x); - { + vec4u_xy_vec2_yx: { elemType: 'u32', vecSize: 4, initial: [10, 11, 12, 13], @@ -172,7 +173,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec3i(-10, -20, -30) // v.y = 50; - { + vec3i_y_literal: { elemType: 'i32', vecSize: 3, initial: [-10, -20, -30], @@ -182,7 +183,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec3i(10, 20, 30) // v.zx = vec2i(40, 60); - { + vec3i_zx_vec2i: { elemType: 'i32', vecSize: 3, initial: [10, 20, 30], @@ -192,7 +193,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec3f(1.0, 2.0, 3.0) // v.xy = vec2f(4.0, 5.0); - { + vec3f_xy_vec2f: { elemType: 'f32', vecSize: 3, initial: [1.0, 2.0, 3.0], @@ -202,7 +203,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec2f(1.0, 2.0) // v.xy = v + v; - { + vec2f_yx_v_plus_v: { elemType: 'f32', vecSize: 2, initial: [1.0, 2.0], @@ -212,7 +213,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec4f(10.0, 20.0, 30.0, 100.0) // v.rgb = vec3f(v.r, v.g, v.b) / 10; - { + vec4f_rgb_vec3f_div_10: { elemType: 'f32', vecSize: 4, initial: [10.0, 20.0, 30.0, 100.0], @@ -222,7 +223,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec2h(1.0, 2.0) // v.yx = vec2h(4.0, 5.0); - { + vec2h_yx_vec2h: { elemType: 'f16', vecSize: 2, initial: [1.0, 2.0], @@ -232,7 +233,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec2(true, false) // v.y = true; - { + vec2_bool_y_true: { elemType: 'bool', vecSize: 2, initial: [1, 0], @@ -242,7 +243,7 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ }, // v = vec3(true, true, true) // v.xz = vec2(false, false); - { + vec3_bool_xz_vec2bool: { elemType: 'bool', vecSize: 3, initial: [1, 1, 1], @@ -250,13 +251,14 @@ const kSwizzleAssignmentCases: SwizzleAssignmentCase[] = [ rhs: 'vec2(false, false)', expected: [0, 1, 0], }, -]; +}; g.test('swizzle_assignment_local_var') .desc('Tests the value of a vector after swizzle assignment on a local function variable.') - .params(u => u.combine('case', kSwizzleAssignmentCases)) + .params(u => u.combine('case', keysOf(kSwizzleAssignmentCases))) .fn(t => { - const { elemType, vecSize, initial, swizzle, rhs, expected } = t.params.case; + const { elemType, vecSize, initial, swizzle, rhs, expected } = + kSwizzleAssignmentCases[t.params.case]; runSwizzleAssignmentTest(t, elemType, vecSize, initial, swizzle, rhs, expected); });