mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-08 13:14:56 +00:00
writer/msl: Hoist array and struct initializers
Pull the HLSL transformation out to a standalone transform that can be used by both HLSL and MSL. The new E2E tests do not yet pass for MSL because they produce array assignments, which will be addressed in the next patch. Fixed: tint:826 Change-Id: Idc27c81ad45e3d4ab96d82663927d2fc1384618e Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/52842 Auto-Submit: James Price <jrprice@google.com> Commit-Queue: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Tint LUCI CQ
parent
1934f59427
commit
42220ba1b2
48
test/array/type_constructor.wgsl
Normal file
48
test/array/type_constructor.wgsl
Normal file
@@ -0,0 +1,48 @@
|
||||
[[stage(compute)]]
|
||||
fn main() {
|
||||
let x : i32 = 42;
|
||||
|
||||
// Test basic usage.
|
||||
let empty : array<i32, 4> = array<i32, 4>();
|
||||
let nonempty : array<i32, 4> = array<i32, 4>(1, 2, 3, 4);
|
||||
let nonempty_with_expr : array<i32, 4> =
|
||||
array<i32, 4>(1, x, x + 1, nonempty[3]);
|
||||
|
||||
// Test nested arrays.
|
||||
let nested_empty : array<array<array<i32, 4>, 3>, 2> =
|
||||
array<array<array<i32, 4>, 3>, 2>();
|
||||
let nested_nonempty : array<array<array<i32, 4>, 3>, 2> =
|
||||
array<array<array<i32, 4>, 3>, 2>(
|
||||
array<array<i32, 4>, 3>(
|
||||
array<i32, 4>(1, 2, 3, 4),
|
||||
array<i32, 4>(5, 6, 7, 8),
|
||||
array<i32, 4>(9, 10, 11, 12)),
|
||||
array<array<i32, 4>, 3>(
|
||||
array<i32, 4>(13, 14, 15, 16),
|
||||
array<i32, 4>(17, 18, 19, 20),
|
||||
array<i32, 4>(21, 22, 23, 24)));
|
||||
let nested_nonempty_with_expr : array<array<array<i32, 4>, 3>, 2> =
|
||||
array<array<array<i32, 4>, 3>, 2>(
|
||||
array<array<i32, 4>, 3>(
|
||||
array<i32, 4>(1, 2, x, x + 1),
|
||||
array<i32, 4>(5, 6, nonempty[2], nonempty[3] + 1),
|
||||
nonempty),
|
||||
nested_nonempty[1]);
|
||||
|
||||
// Test use of constructors as sub-expressions.
|
||||
let subexpr_empty : i32 = array<i32, 4>()[1];
|
||||
let subexpr_nonempty : i32 = array<i32, 4>(1, 2, 3, 4)[2];
|
||||
let subexpr_nonempty_with_expr : i32 =
|
||||
array<i32, 4>(1, x, x + 1, nonempty[3])[2];
|
||||
let subexpr_nested_empty : array<i32, 4> = array<array<i32, 4>, 2>()[1];
|
||||
let subexpr_nested_nonempty : array<i32, 4> =
|
||||
array<array<i32, 4>, 2>(
|
||||
array<i32, 4>(1, 2, 3, 4),
|
||||
array<i32, 4>(5, 6, 7, 8)
|
||||
)[1];
|
||||
let subexpr_nested_nonempty_with_expr : array<i32, 4> =
|
||||
array<array<i32, 4>, 2>(
|
||||
array<i32, 4>(1, x, x + 1, nonempty[3]),
|
||||
nested_nonempty[1][2],
|
||||
)[1];
|
||||
}
|
||||
38
test/array/type_constructor.wgsl.expected.hlsl
Normal file
38
test/array/type_constructor.wgsl.expected.hlsl
Normal file
@@ -0,0 +1,38 @@
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
const int x = 42;
|
||||
const int empty[4] = {0, 0, 0, 0};
|
||||
const int nonempty[4] = {1, 2, 3, 4};
|
||||
const int nonempty_with_expr[4] = {1, x, (x + 1), nonempty[3]};
|
||||
const int nested_empty[2][3][4] = {{{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}};
|
||||
const int tint_symbol[4] = {1, 2, 3, 4};
|
||||
const int tint_symbol_1[4] = {5, 6, 7, 8};
|
||||
const int tint_symbol_2[4] = {9, 10, 11, 12};
|
||||
const int tint_symbol_3[3][4] = {tint_symbol, tint_symbol_1, tint_symbol_2};
|
||||
const int tint_symbol_4[4] = {13, 14, 15, 16};
|
||||
const int tint_symbol_5[4] = {17, 18, 19, 20};
|
||||
const int tint_symbol_6[4] = {21, 22, 23, 24};
|
||||
const int tint_symbol_7[3][4] = {tint_symbol_4, tint_symbol_5, tint_symbol_6};
|
||||
const int nested_nonempty[2][3][4] = {tint_symbol_3, tint_symbol_7};
|
||||
const int tint_symbol_8[4] = {1, 2, x, (x + 1)};
|
||||
const int tint_symbol_9[4] = {5, 6, nonempty[2], (nonempty[3] + 1)};
|
||||
const int tint_symbol_10[3][4] = {tint_symbol_8, tint_symbol_9, nonempty};
|
||||
const int nested_nonempty_with_expr[2][3][4] = {tint_symbol_10, nested_nonempty[1]};
|
||||
const int tint_symbol_11[4] = {0, 0, 0, 0};
|
||||
const int subexpr_empty = tint_symbol_11[1];
|
||||
const int tint_symbol_12[4] = {1, 2, 3, 4};
|
||||
const int subexpr_nonempty = tint_symbol_12[2];
|
||||
const int tint_symbol_13[4] = {1, x, (x + 1), nonempty[3]};
|
||||
const int subexpr_nonempty_with_expr = tint_symbol_13[2];
|
||||
const int tint_symbol_14[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}};
|
||||
const int subexpr_nested_empty[4] = tint_symbol_14[1];
|
||||
const int tint_symbol_15[4] = {1, 2, 3, 4};
|
||||
const int tint_symbol_16[4] = {5, 6, 7, 8};
|
||||
const int tint_symbol_17[2][4] = {tint_symbol_15, tint_symbol_16};
|
||||
const int subexpr_nested_nonempty[4] = tint_symbol_17[1];
|
||||
const int tint_symbol_18[4] = {1, x, (x + 1), nonempty[3]};
|
||||
const int tint_symbol_19[2][4] = {tint_symbol_18, nested_nonempty[1][2]};
|
||||
const int subexpr_nested_nonempty_with_expr[4] = tint_symbol_19[1];
|
||||
return;
|
||||
}
|
||||
|
||||
1
test/array/type_constructor.wgsl.expected.msl
Normal file
1
test/array/type_constructor.wgsl.expected.msl
Normal file
@@ -0,0 +1 @@
|
||||
SKIP: crbug.com/tint/814
|
||||
94
test/array/type_constructor.wgsl.expected.spvasm
Normal file
94
test/array/type_constructor.wgsl.expected.spvasm
Normal file
@@ -0,0 +1,94 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 79
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %main "main"
|
||||
OpDecorate %_arr_int_uint_4 ArrayStride 4
|
||||
OpDecorate %_arr__arr_int_uint_4_uint_3 ArrayStride 16
|
||||
OpDecorate %_arr__arr__arr_int_uint_4_uint_3_uint_2 ArrayStride 48
|
||||
OpDecorate %_arr__arr_int_uint_4_uint_2 ArrayStride 16
|
||||
%void = OpTypeVoid
|
||||
%1 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%int_42 = OpConstant %int 42
|
||||
%uint = OpTypeInt 32 0
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_int_uint_4 = OpTypeArray %int %uint_4
|
||||
%10 = OpConstantNull %_arr_int_uint_4
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_4 = OpConstant %int 4
|
||||
%15 = OpConstantComposite %_arr_int_uint_4 %int_1 %int_2 %int_3 %int_4
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_arr__arr_int_uint_4_uint_3 = OpTypeArray %_arr_int_uint_4 %uint_3
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_arr__arr__arr_int_uint_4_uint_3_uint_2 = OpTypeArray %_arr__arr_int_uint_4_uint_3 %uint_2
|
||||
%23 = OpConstantNull %_arr__arr__arr_int_uint_4_uint_3_uint_2
|
||||
%int_5 = OpConstant %int 5
|
||||
%int_6 = OpConstant %int 6
|
||||
%int_7 = OpConstant %int 7
|
||||
%int_8 = OpConstant %int 8
|
||||
%28 = OpConstantComposite %_arr_int_uint_4 %int_5 %int_6 %int_7 %int_8
|
||||
%int_9 = OpConstant %int 9
|
||||
%int_10 = OpConstant %int 10
|
||||
%int_11 = OpConstant %int 11
|
||||
%int_12 = OpConstant %int 12
|
||||
%33 = OpConstantComposite %_arr_int_uint_4 %int_9 %int_10 %int_11 %int_12
|
||||
%34 = OpConstantComposite %_arr__arr_int_uint_4_uint_3 %15 %28 %33
|
||||
%int_13 = OpConstant %int 13
|
||||
%int_14 = OpConstant %int 14
|
||||
%int_15 = OpConstant %int 15
|
||||
%int_16 = OpConstant %int 16
|
||||
%39 = OpConstantComposite %_arr_int_uint_4 %int_13 %int_14 %int_15 %int_16
|
||||
%int_17 = OpConstant %int 17
|
||||
%int_18 = OpConstant %int 18
|
||||
%int_19 = OpConstant %int 19
|
||||
%int_20 = OpConstant %int 20
|
||||
%44 = OpConstantComposite %_arr_int_uint_4 %int_17 %int_18 %int_19 %int_20
|
||||
%int_21 = OpConstant %int 21
|
||||
%int_22 = OpConstant %int 22
|
||||
%int_23 = OpConstant %int 23
|
||||
%int_24 = OpConstant %int 24
|
||||
%49 = OpConstantComposite %_arr_int_uint_4 %int_21 %int_22 %int_23 %int_24
|
||||
%50 = OpConstantComposite %_arr__arr_int_uint_4_uint_3 %39 %44 %49
|
||||
%51 = OpConstantComposite %_arr__arr__arr_int_uint_4_uint_3_uint_2 %34 %50
|
||||
%_arr__arr_int_uint_4_uint_2 = OpTypeArray %_arr_int_uint_4 %uint_2
|
||||
%68 = OpConstantNull %_arr__arr_int_uint_4_uint_2
|
||||
%70 = OpConstantComposite %_arr__arr_int_uint_4_uint_2 %15 %28
|
||||
%main = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%16 = OpIAdd %int %int_42 %int_1
|
||||
%17 = OpCompositeExtract %int %15 3
|
||||
%18 = OpCompositeConstruct %_arr_int_uint_4 %int_1 %int_42 %16 %17
|
||||
%52 = OpIAdd %int %int_42 %int_1
|
||||
%53 = OpCompositeConstruct %_arr_int_uint_4 %int_1 %int_2 %int_42 %52
|
||||
%54 = OpCompositeExtract %int %15 2
|
||||
%55 = OpCompositeExtract %int %15 3
|
||||
%56 = OpIAdd %int %55 %int_1
|
||||
%57 = OpCompositeConstruct %_arr_int_uint_4 %int_5 %int_6 %54 %56
|
||||
%58 = OpCompositeConstruct %_arr__arr_int_uint_4_uint_3 %53 %57 %15
|
||||
%59 = OpCompositeExtract %_arr__arr_int_uint_4_uint_3 %51 1
|
||||
%60 = OpCompositeConstruct %_arr__arr__arr_int_uint_4_uint_3_uint_2 %58 %59
|
||||
%61 = OpCompositeExtract %int %10 1
|
||||
%62 = OpCompositeExtract %int %15 2
|
||||
%63 = OpIAdd %int %int_42 %int_1
|
||||
%64 = OpCompositeExtract %int %15 3
|
||||
%65 = OpCompositeConstruct %_arr_int_uint_4 %int_1 %int_42 %63 %64
|
||||
%66 = OpCompositeExtract %int %65 2
|
||||
%69 = OpCompositeExtract %_arr_int_uint_4 %68 1
|
||||
%71 = OpCompositeExtract %_arr_int_uint_4 %70 1
|
||||
%72 = OpIAdd %int %int_42 %int_1
|
||||
%73 = OpCompositeExtract %int %15 3
|
||||
%74 = OpCompositeConstruct %_arr_int_uint_4 %int_1 %int_42 %72 %73
|
||||
%75 = OpCompositeExtract %_arr__arr_int_uint_4_uint_3 %51 1
|
||||
%76 = OpCompositeExtract %_arr_int_uint_4 %75 2
|
||||
%77 = OpCompositeConstruct %_arr__arr_int_uint_4_uint_2 %74 %76
|
||||
%78 = OpCompositeExtract %_arr_int_uint_4 %77 1
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
16
test/array/type_constructor.wgsl.expected.wgsl
Normal file
16
test/array/type_constructor.wgsl.expected.wgsl
Normal file
@@ -0,0 +1,16 @@
|
||||
[[stage(compute)]]
|
||||
fn main() {
|
||||
let x : i32 = 42;
|
||||
let empty : array<i32, 4> = array<i32, 4>();
|
||||
let nonempty : array<i32, 4> = array<i32, 4>(1, 2, 3, 4);
|
||||
let nonempty_with_expr : array<i32, 4> = array<i32, 4>(1, x, (x + 1), nonempty[3]);
|
||||
let nested_empty : array<array<array<i32, 4>, 3>, 2> = array<array<array<i32, 4>, 3>, 2>();
|
||||
let nested_nonempty : array<array<array<i32, 4>, 3>, 2> = array<array<array<i32, 4>, 3>, 2>(array<array<i32, 4>, 3>(array<i32, 4>(1, 2, 3, 4), array<i32, 4>(5, 6, 7, 8), array<i32, 4>(9, 10, 11, 12)), array<array<i32, 4>, 3>(array<i32, 4>(13, 14, 15, 16), array<i32, 4>(17, 18, 19, 20), array<i32, 4>(21, 22, 23, 24)));
|
||||
let nested_nonempty_with_expr : array<array<array<i32, 4>, 3>, 2> = array<array<array<i32, 4>, 3>, 2>(array<array<i32, 4>, 3>(array<i32, 4>(1, 2, x, (x + 1)), array<i32, 4>(5, 6, nonempty[2], (nonempty[3] + 1)), nonempty), nested_nonempty[1]);
|
||||
let subexpr_empty : i32 = array<i32, 4>()[1];
|
||||
let subexpr_nonempty : i32 = array<i32, 4>(1, 2, 3, 4)[2];
|
||||
let subexpr_nonempty_with_expr : i32 = array<i32, 4>(1, x, (x + 1), nonempty[3])[2];
|
||||
let subexpr_nested_empty : array<i32, 4> = array<array<i32, 4>, 2>()[1];
|
||||
let subexpr_nested_nonempty : array<i32, 4> = array<array<i32, 4>, 2>(array<i32, 4>(1, 2, 3, 4), array<i32, 4>(5, 6, 7, 8))[1];
|
||||
let subexpr_nested_nonempty_with_expr : array<i32, 4> = array<array<i32, 4>, 2>(array<i32, 4>(1, x, (x + 1), nonempty[3]), nested_nonempty[1][2])[1];
|
||||
}
|
||||
Reference in New Issue
Block a user