James Price 128980f218 tint: Add support for workgroupUniformLoad
Accept any type in the intrinsics definition, and then manually
validate that there are no atomics in the type. Add manual E2E tests
for composite types.

Use the BuiltinPolyfill transform to implement it for all backends.

Update the uniformity analysis with special-case tags for the builtin.

Fixed: tint:1780
Change-Id: I95786dff4df70a0b16ed1c53b853b5d0ec6bc501
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/114862
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
Kokoro: James Price <jrprice@google.com>
2023-01-06 02:25:06 +00:00

65 lines
2.8 KiB
Plaintext

; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
; Bound: 33
; Schema: 0
OpCapability Shader
OpCapability Float16
OpCapability UniformAndStorageBuffer16BitAccess
OpCapability StorageBuffer16BitAccess
OpCapability StorageInputOutput16
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %compute_main "compute_main" %local_invocation_index_1
OpExecutionMode %compute_main LocalSize 1 1 1
OpName %local_invocation_index_1 "local_invocation_index_1"
OpName %arg_0 "arg_0"
OpName %tint_workgroupUniformLoad_arg_0 "tint_workgroupUniformLoad_arg_0"
OpName %workgroupUniformLoad_e07d08 "workgroupUniformLoad_e07d08"
OpName %res "res"
OpName %compute_main_inner "compute_main_inner"
OpName %local_invocation_index "local_invocation_index"
OpName %compute_main "compute_main"
OpDecorate %local_invocation_index_1 BuiltIn LocalInvocationIndex
%uint = OpTypeInt 32 0
%_ptr_Input_uint = OpTypePointer Input %uint
%local_invocation_index_1 = OpVariable %_ptr_Input_uint Input
%half = OpTypeFloat 16
%_ptr_Workgroup_half = OpTypePointer Workgroup %half
%arg_0 = OpVariable %_ptr_Workgroup_half Workgroup
%7 = OpTypeFunction %half
%void = OpTypeVoid
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
%16 = OpTypeFunction %void
%_ptr_Function_half = OpTypePointer Function %half
%22 = OpConstantNull %half
%23 = OpTypeFunction %void %uint
%tint_workgroupUniformLoad_arg_0 = OpFunction %half None %7
%9 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
%14 = OpLoad %half %arg_0
OpControlBarrier %uint_2 %uint_2 %uint_264
OpReturnValue %14
OpFunctionEnd
%workgroupUniformLoad_e07d08 = OpFunction %void None %16
%18 = OpLabel
%res = OpVariable %_ptr_Function_half Function %22
%19 = OpFunctionCall %half %tint_workgroupUniformLoad_arg_0
OpStore %res %19
OpReturn
OpFunctionEnd
%compute_main_inner = OpFunction %void None %23
%local_invocation_index = OpFunctionParameter %uint
%26 = OpLabel
OpStore %arg_0 %22
OpControlBarrier %uint_2 %uint_2 %uint_264
%28 = OpFunctionCall %void %workgroupUniformLoad_e07d08
OpReturn
OpFunctionEnd
%compute_main = OpFunction %void None %16
%30 = OpLabel
%32 = OpLoad %uint %local_invocation_index_1
%31 = OpFunctionCall %void %compute_main_inner %32
OpReturn
OpFunctionEnd