test/tint/builtins/gen: Use returned value
It appears that FXC and DXC do some validation post dead-code-elimination.
These tests have been updated so that the return value is assigned to a storage buffer, ensuring that all validation is performed.
Many DXC tests are affected by https://github.com/microsoft/DirectXShaderCompiler/issues/5082, which have been SKIP'ed.
Fixed: tint:1859
Change-Id: I0001a9a9821846cd0855c3d8ce2bec79ab8e64ef
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/122662
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: James Price <jrprice@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm
index aee30a5..eb1a49a 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 46
; Schema: 0
OpCapability Shader
OpCapability Float16
OpCapability UniformAndStorageBuffer16BitAccess
OpCapability StorageBuffer16BitAccess
OpCapability StorageInputOutput16
- %21 = OpExtInstImport "GLSL.std.450"
+ %24 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -17,6 +17,9 @@
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %value "value"
OpName %vertex_point_size "vertex_point_size"
+ OpName %prevent_dce_block "prevent_dce_block"
+ OpMemberName %prevent_dce_block 0 "inner"
+ OpName %prevent_dce "prevent_dce"
OpName %round_f665b5 "round_f665b5"
OpName %arg_0 "arg_0"
OpName %res "res"
@@ -26,6 +29,10 @@
OpName %compute_main "compute_main"
OpDecorate %value BuiltIn Position
OpDecorate %vertex_point_size BuiltIn PointSize
+ OpDecorate %prevent_dce_block Block
+ OpMemberDecorate %prevent_dce_block 0 Offset 0
+ OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce Binding 0
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -34,45 +41,54 @@
%_ptr_Output_float = OpTypePointer Output %float
%8 = OpConstantNull %float
%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %void = OpTypeVoid
- %9 = OpTypeFunction %void
%half = OpTypeFloat 16
%v4half = OpTypeVector %half 4
+%prevent_dce_block = OpTypeStruct %v4half
+%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
+%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
+ %void = OpTypeVoid
+ %14 = OpTypeFunction %void
%half_0x1_cp_1 = OpConstant %half 0x1.cp+1
- %16 = OpConstantComposite %v4half %half_0x1_cp_1 %half_0x1_cp_1 %half_0x1_cp_1 %half_0x1_cp_1
+ %19 = OpConstantComposite %v4half %half_0x1_cp_1 %half_0x1_cp_1 %half_0x1_cp_1 %half_0x1_cp_1
%_ptr_Function_v4half = OpTypePointer Function %v4half
- %19 = OpConstantNull %v4half
- %24 = OpTypeFunction %v4float
+ %22 = OpConstantNull %v4half
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_StorageBuffer_v4half = OpTypePointer StorageBuffer %v4half
+ %32 = OpTypeFunction %v4float
%float_1 = OpConstant %float 1
-%round_f665b5 = OpFunction %void None %9
- %12 = OpLabel
- %arg_0 = OpVariable %_ptr_Function_v4half Function %19
- %res = OpVariable %_ptr_Function_v4half Function %19
- OpStore %arg_0 %16
- %22 = OpLoad %v4half %arg_0
- %20 = OpExtInst %v4half %21 RoundEven %22
- OpStore %res %20
+%round_f665b5 = OpFunction %void None %14
+ %17 = OpLabel
+ %arg_0 = OpVariable %_ptr_Function_v4half Function %22
+ %res = OpVariable %_ptr_Function_v4half Function %22
+ OpStore %arg_0 %19
+ %25 = OpLoad %v4half %arg_0
+ %23 = OpExtInst %v4half %24 RoundEven %25
+ OpStore %res %23
+ %30 = OpAccessChain %_ptr_StorageBuffer_v4half %prevent_dce %uint_0
+ %31 = OpLoad %v4half %res
+ OpStore %30 %31
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
- %26 = OpLabel
- %27 = OpFunctionCall %void %round_f665b5
+%vertex_main_inner = OpFunction %v4float None %32
+ %34 = OpLabel
+ %35 = OpFunctionCall %void %round_f665b5
OpReturnValue %5
OpFunctionEnd
-%vertex_main = OpFunction %void None %9
- %29 = OpLabel
- %30 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %30
+%vertex_main = OpFunction %void None %14
+ %37 = OpLabel
+ %38 = OpFunctionCall %v4float %vertex_main_inner
+ OpStore %value %38
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %9
- %33 = OpLabel
- %34 = OpFunctionCall %void %round_f665b5
+%fragment_main = OpFunction %void None %14
+ %41 = OpLabel
+ %42 = OpFunctionCall %void %round_f665b5
OpReturn
OpFunctionEnd
-%compute_main = OpFunction %void None %9
- %36 = OpLabel
- %37 = OpFunctionCall %void %round_f665b5
+%compute_main = OpFunction %void None %14
+ %44 = OpLabel
+ %45 = OpFunctionCall %void %round_f665b5
OpReturn
OpFunctionEnd